クロスページ投稿で複数のターゲットページを持つことは可能ですか?
-
06-07-2019 - |
質問
クロスページ投稿を使用して別のターゲットページに投稿するWebページがあります。
新しい要件が発生しました。これは、クライアントに入力されたデータに応じて、4つの異なるターゲットページも投稿できることを意味します。
クライアントでクロスページ投稿ターゲットを何らかの方法で動的に変更することは可能ですか?
ソースhtmlを見ると、jqueryを使用して送信ボタンのポストバックターゲットを操作することは可能だと思いますが、これはちょっとしたハックのようです。
代替手段は何ですか、ページを書き換えてクロスページ投稿を削除し、セッションでデータを渡す応答リダイレクトを行いますか?
解決
はい、フォームの action
を確実に変更できます。その方法を説明します。
最初に、フォームにはHTMLで指定された名前とアクションURLが必要です:
<form name="aformiam" method="post" action="/somewhere/to/go.php">
次に、フォーム送信時にJavaScriptを実行する必要があるため、送信ボタンのonClickプロパティを次のような関数に設定する必要があります。
<input type="submit" value="Send Form" onClick="return submitForm();" />
最後に、実際にフォームアクションを変更してフォームを送信するJavaScript関数です。
function submitForm() {
// do anything here you need to determine which URL to post to
// I am just making an example here
var targetURL = '/some/url/to/post.php';
// now we will change the form's action
document.aformiam.action = targetURL;
// finally, submit the form by returning true
return true;
}
trueを返す最後のステップでは、入力要素のタイプが submit
であり、関数は onClick
イベントによってトリガーされるため、フォームを送信します。たとえば、これが button
タイプの入力要素、または a
タグまたは img
である場合、送信するフォームをトリガーする必要があります。次のようなものを使用します。
document.aformiam.submit();
このソリューションは、アクションを変更し、単一 URLに送信するように機能します。一度に複数のURLに投稿する必要がある場合は、XMLHttpRequestなどの他のメソッドを使用する必要があります。その場合は、そのことを示すコメントを投稿してください。そのための例を提供します。
他のヒント
フォームを送信する直前に、JavaScriptを使用してフォームの action
属性を変更してみてください。
残念ながら、ほとんどのブラウザはPOSTリダイレクトをサポートしていません。 RFCのメモ:
RFC 1945およびRFC 2068は、クライアントが許可されていないことを指定しています リダイレクトされたリクエストのメソッドを変更します。ただし、ほとんど 既存のユーザーエージェント実装は、302を303であるかのように扱います。 応答、関係なくLocationフィールド値でGETを実行 元のリクエストメソッドのステータスコード303および307は 明確にしたいサーバーに追加されました クライアントに一種の反応が期待されます。
つまり、私見では、選択はJavaScript action
の変更またはサーバーからのデータの再POSTに制限されます(サーバーはPOSTされたデータを受け入れ、それを分析し、それ自体でPOSTを実行します)。
セッションにデータを保存(またはPOSTでデータを返す)してからクライアントから再POSTするには、JavaScriptのサポート(フォームを自動的に送信する)か、ユーザーが「送信」をクリックする必要があります。もう一度ボタンを押します。ただし、このメソッドをフォールバックとして使用することを検討できます。
デフォルトの action
がフォールバックスクリプトを指すようにします。送信前に action
の変更に成功した場合&#8212;この時点ですべては大丈夫です。 JavaScriptが無効になっている場合など、何かが失敗した場合&#8212;非表示のデータフィールド(これ以上変更しないでください)と表示される送信ボタンを使用してフォールバックスクリプトの出力ページを作成し、適切な場所にデータをPOSTします。