为什么我的Dojo表单中的xhrpost不会接到电话?

时间:2011-11-16 09:26:36

标签: dojo

Hello dearest community。

我在过去两天遇到麻烦,我无法解决。 问题是我以这种方式定义了Dojo表单:

<div id="reportBulananDialog" jsId="reportBulananDialog" dojoType="dijit.Dialog" title="Laporan Bulanan" draggable="true">
        <div dojoType="dijit.form.Form" id="reportBulananForm" jsId="reportBulananForm" action="action/display_reportBulanan.php" method="post">
...

以这种方式定义的script.js文件中的连接调用:

dojo.connect(mnuLaporanBulanan, "onClick", null, function(e) {
        dijit.byId("reportBulananDialog").show();
    });
 dojo.connect(reportBulananForm, "onSubmit", null, doReportBulananForm);
    dojo.connect(reportBulananCancel, "onClick", null, function(e) {
        reportBulananDialog.hide();
    });

您可以看到我将onSubmit事件连接到以这种方式定义的函数doReportBulananForm

function doReportBulananForm()
{   
    alert('test1');
    dojo.xhrPost({
        form: this.domNode,
        handleAs: "json",
        load: function(data) {
            alert("after call: " + data);
            if(data.success) {
                reportBulananDialog.hide();
                okDialog.set("title","Menampilkan report");
                okDialogMsg.innerHTML = "Report";
                okDialog.show();
            }
            else {
                okDialog.set("title","Error creating group");
                okDialogMsg.innerHTML = data.error;
                okDialog.show();
            }
        },
        error: function(error) {
            okDialog.set("title","Error creating group");
            okDialogMsg.innerHTML = error;
            okDialog.show();
            alert("error " + data);
        }
    });
    alert('test2');
}

问题是,应用程序总是将应用程序流重定向到文件action/display_reportBulanan.php,而不是处理其json输出..

这非常令人困惑,我做错了什么?

谢谢, EKO

2 个答案:

答案 0 :(得分:2)

我认为您必须阻止默认表单提交。 在onSubmit处理程序中,请改为:

function doReportBulananForm(evt)
{   
    evt.preventDefault();
    alert('test1');
    // The rest of your code goes here
}

您还可以在connect:

中为函数调用添加一个事件参数
dojo.connect(reportBulananForm, "onSubmit", null, doReportBulananForm(evt));

有关详情,请参阅此页:http://dojotoolkit.org/reference-guide/quickstart/events.html

答案 1 :(得分:2)

您需要停用默认表单提交。您可以在false函数中返回doReportBulananForm或使用以下代码:

function doReportBulananForm(e) {
    dojo.stopEvent(e);
}

有关更多详细信息,请参阅dojo的测试用例。见http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_Form_onsubmit.html