クロスページ投稿で複数のターゲットページを持つことは可能ですか?

StackOverflow https://stackoverflow.com/questions/1023529

質問

クロスページ投稿を使用して別のターゲットページに投稿する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します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top