4

次のアクションを実行するときに、AJAXリクエストを作成してユーザーを他のページに送信するにはどうすればよいですか?

  1. ブラウザの次、前のボタンをクリックします。
  2. 任意の方法でページを更新します (f5、ctrl+r、更新ボタン)。
  3. ブラウザのウィンドウを閉じてみてください(ここではリダイレクトしたくありません。AJAXリクエストのみです)。

私はwindow.onbeforeunloadがそれを作ることができると思った、

  window.onbeforeunload = function () {
    makeAjaxCall();
    ------
    ------
  }

 // Ajax Call is successful
  function makeAjaxCall_SuccessHandler() {
    window.location.href = 'Home.html';
 }

しかし、まったく機能していません......... このトピックを検索した後、これはブラウザのセキュリティのために作成された一種のルールであることがわかりました。そのため、これを行う方法またはこれを達成するための代替方法を教えてください。

4

2 に答える 2

1

あなたが得ている実際の動作を説明していないので、ここで推測していますが、ここでの問題は AJAX の非同期部分にあると思います。ご覧のとおり、onbeforeunload ハンドラーが実行されると、AJAX 呼び出しを開始する可能性は非常に高くなりますが結果が返されるのを待ってブロックすることはありません。代わりに、実行が続行され、AJAX 要求から結果が得られる前に onbeforeunload が完了します (呼び出しが行われた場合)。

まず、デバッグ トレースを追加して、ハンドラーが実際に実行されていることを確認します。そうである場合は、アイドル ループを追加してビジー状態に保ち (返されないようにする)、AJAX 呼び出しが行われるかどうかを確認します (サーバー側で確認します)。

その場合は、何らかのフラグを参照するようにアイドル ループを変更する必要があると思います。または、使用するライブラリで許可されている場合は、サーバー呼び出しを同期させます。

于 2012-04-04T11:57:53.317 に答える
1

違うと思う。
ブラウザーは、アクションの後いつでも実行を停止できます。このため、Ajax 呼び出しは非常に長い操作です。

onbeforeunload本当に使いますか?」などの質問をユーザーに尋ねることができます。文字列を返すか、それをに割り当てる必要がありますevent.returnValue

ここでそれについて読むことができますhttps://developer.mozilla.org/en/DOM/window.onbeforeunload

あなたの問題で、同期呼び出しを行うか、GETパラメーターを使用してiframeを開くか、この関数の本体でiframeにフォームデータを送信しようとすることができると思います。しかし、時間についてはわかりません。

于 2012-04-04T11:44:35.503 に答える