2

クロスページ投稿を使用して別のターゲットページに投稿する Web ページがあります。

クライアントに入力されたデータに応じて、投稿する 4 つの異なるターゲット ページが存在する可能性があることを意味する新しい要件が発生しました。

クライアント上でクロスページの投稿対象を動的に変更することはできますか?

ソースhtmlを見ると、jqueryを使用して送信ボタンのポストバックターゲットを操作できると思いますが、これは少しハックのようです.

ページを書き換えてクロスページ投稿を削除し、セッションでデータを渡す応答リダイレクトを行うにはどうすればよいですか?

4

2 に答える 2

2

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;
}

submittrue を返す最後のステップでは、入力要素のタイプがであり、関数がonClickイベントによってトリガーされるため、フォームが送信されることに注意してください。たとえば、これがbuttontype input 要素またはaタグでimgある場合、次のようなものを使用してフォームを送信するようにトリガーする必要があります。

document.aformiam.submit();

このソリューションは、アクションを変更して単一のURL に送信するために機能します。一度に複数の URL に投稿する必要がある場合は、XMLHttpRequest などの他のメソッドを使用する必要があります。その場合は、その旨を示すコメントを投稿してください。その例を示します。

于 2009-06-21T14:32:37.857 に答える
1

actionフォーム送信の直前に、JavaScript を使用してフォームの属性を変更してみてください。

残念ながら、ほとんどのブラウザーは POST リダイレクトをサポートしていません。RFCでさえ次のように述べています。

RFC 1945 および RFC 2068 では、リダイレクトされた要求でクライアントがメソッドを変更することは許可されていないと規定されています。ただし、ほとんどの既存のユーザー エージェント実装は、302 を 303 応答であるかのように扱い、元の要求メソッドに関係なく、Location フィールド値に対して GET を実行します。ステータス コード 303 および 307 は、クライアントに期待される反応の種類を明確に明らかにしたいサーバー用に追加されました。

そのため、私見では、選択肢は JavaScriptactionの変更またはサーバーからのデータの再投稿に限定されています (サーバーは POST されたデータを受け入れ、それを分析し、POST を単独で実行します)。

データをセッションに保存 (または単に POST で返す) し、クライアントから再 POST するには、JavaScript のサポート (フォームを自動的に送信するため) か、ユーザーに「送信」ボタンをもう一度クリックさせる必要があります。ただし、この方法をフォールバックとして使用することを検討してください。

actionフォールバック スクリプトをデフォルトポイントにします。送信前に変更に成功した場合action— この時点ではすべて問題ありません。JavaScript が無効になっている場合など、何かが失敗した場合 — フォールバック スクリプトの出力ページに非表示のデータ フィールド (これ以上変更しないようにする必要があります) を作成し、送信ボタンを表示して、データを適切な場所に POST します。

于 2009-06-21T11:26:30.883 に答える