Javascript没有在dojox.layout.ContentPane中使用Ajax表单发布

时间:2012-10-19 03:29:20

标签: dojo

我的页面上有一个表单。我想发布它并将响应放在对话框窗口中。响应是一个http页面,其上有javascript要执行。

我想要的东西就像dojox.widget.DialogSimple一样只适用于表单帖子,而不是常规的http“get”url。

如何将dojox.layout.ContentPane与表单帖子一起使用?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用xhr.post()发布表单,并使用yourContentPane.set("content", resultOfPost)更新dojox.layout.ContentPane。我不确定手动设置内容时是否会执行javascript,或者这只适用于设置href。

购买无论如何不建议在你的HTML回复中嵌入javascript。您可以在成功发布后执行代码。这段伪代码可以给你一个想法:

// Handle the submission of the "Generate service" form
on(document.body, "#yourForm:submit", function(evt) {
    evt.preventDefault();
    xhr.post({
        handleAs: "text",
        form: "yourFormId",
        timeout: 15000,
        load: function(data, ioArgs) {
            var yourContentPane = registry.byId("yourContentPane");
            yourContentPane.set("content", data);
            // Execute your javascript code here, instead
            // of embedding it in the html that is loaded into
            // the content pane...
        },
        error: function(err, ioArgs) {
            // handle error
        }
    };
}));

在这种情况下,内容窗格也可以是一个简单的dijit.layout.ContentPane实例,因为不需要执行嵌入式javascript。

答案 1 :(得分:0)

谢谢,这不是一个糟糕的方式,但我希望有一些运行javascript的东西,并且更加无缝。经过多次实验,我发现了这个:

    dialog = new dojox.widget.DialogSimple({
        title: 'My Dialog',
        width: '400px',
        height: '300px',
        ioMethod: dojo.xhrPost,
        ioArgs: {
            form: formDomNode
        }
    });
    dialog.set("href", formDomNode.action);

    dojo.connect(dialog, 'onHide', dojo.hitch(dialog, function() {
        this.destroyRecursive();
    }));

    dialog.show();

DialogSimple完全是Dialog和dojox ContentPane混合,ContentPane支持post和get。 “href”必须在之后设置,而不是作为初始参数设置,否则由于某种原因它无法正常工作。

直接向dojox ContentPane发帖:(请注意,它只会在放置在实际页面上时执行javascript)

    var cp = new dojox.layout.ContentPane({
        ioMethod: dojo.xhrPost,
        ioArgs: {
            form: formDomNode
        }
    }, "dialogContent");
    //cp.placeAt("dialogContent");
    cp.set("href", formDomNode.action);