我的页面上有一个表单。我想发布它并将响应放在对话框窗口中。响应是一个http页面,其上有javascript要执行。
我想要的东西就像dojox.widget.DialogSimple一样只适用于表单帖子,而不是常规的http“get”url。
如何将dojox.layout.ContentPane与表单帖子一起使用?
答案 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);