私のページにフォームがあります。それを投稿して、応答をダイアログウィンドウに入れたいです。応答は、実行する JavaScript を含む http ページです。
dojox.widget.DialogSimple のように、通常の http "get" URL ではなく、フォーム ポストでのみ機能するものが必要です。
フォーム投稿で dojox.layout.ContentPane を使用するにはどうすればよいですか?
私のページにフォームがあります。それを投稿して、応答をダイアログウィンドウに入れたいです。応答は、実行する JavaScript を含む http ページです。
dojox.widget.DialogSimple のように、通常の http "get" URL ではなく、フォーム ポストでのみ機能するものが必要です。
フォーム投稿で dojox.layout.ContentPane を使用するにはどうすればよいですか?
ありがとう、それは悪い方法ではありませんが、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 は get だけでなく post もサポートしています。「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);
xhr.post() を使用してフォームを投稿し、dojox.layout.ContentPane を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
}
};
}));
この場合、埋め込まれた JavaScript を実行する必要がないため、コンテンツ ペインも単純な dijit.layout.ContentPane インスタンスにすることができます。