我的页面上有一个表格。我想发布它并将响应放在对话窗口中。响应是一个带有要执行的 javascript 的 http 页面。
我想要像 dojox.widget.DialogSimple 这样的东西,它只适用于表单帖子,而不是常规的 http“get”url。
如何将 dojox.layout.ContentPane 与表单帖子一起使用?
我的页面上有一个表格。我想发布它并将响应放在对话窗口中。响应是一个带有要执行的 javascript 的 http 页面。
我想要像 dojox.widget.DialogSimple 这样的东西,它只适用于表单帖子,而不是常规的 http“get”url。
如何将 dojox.layout.ContentPane 与表单帖子一起使用?
您可以尝试使用 xhr.post() 发布您的表单并使用yourContentPane.set("content", resultOfPost)
. 我不确定在手动设置内容时是否会执行 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。
谢谢,这不是一个糟糕的方法,但我希望有一些可以运行 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);