0

私の Web アプリは Tomcat で実行され、AJAX 要求を非常に集中的に使用し、開発プロセス中に Web アプリも集中的に再デプロイする必要があります。再展開後、通常はユーザー セッションが切断されたことを認識してページを更新するだけですが、以下に説明するシナリオが常に発生します。

  1. 多くの JS スクリプトが含まれる非常に大きなページで、実際にこれらの集中的な AJAX 要求を行うページに移動します。
  2. Tomcat を停止するか、Web アプリを再デプロイします。
  3. ページを更新。
  4. サインイン フォームに資格情報を入力して認証します。
  5. 突然、ブラウザ ウィンドウに最後のAJAX 要求応答が表示され、URL バーに AJAX 要求 URL が表示されます。

うわー... AJAX リクエストの URL が URL バーに表示され、その応答が Web ページ表示領域に表示されるのは奇妙に思えます。これは実際に Firefox と Chrome で発生します (他のブラウザーではテストしていません)。残念ながら、ゼロから作成した単純なページで同じ動作を再現することはできません。率直に言って、私はそのようなリクエストに何が起こるのか、また、AJAX リクエスト/レスポンスがユーザーによって URL バーに入力された場合にブラウザが「考える」理由をよく理解していません...

このような奇妙な動作について、考えられる説明やヒントをいただければ幸いです。ありがとう!

(おそらくそれが役立つかもしれません: すべての AJAX リクエストは jQuery 1.4.2 で実行されます)

4

1 に答える 1

0

申し訳ありませんが、後で理解したように、質問は完全ではありません。言及しなかった別の落とし穴があったため、原則として誰も質問に答えることができませんでした。バグの理由は...<body onunload="...">タグ定義に隠れていました。これはまったく予想外のことでしたが、そのコードには、ユーザーがページを離れたときに呼び出す必要がある AJAX 要求が含まれていました。FORM認証モジュール ( 、 ) がヘッダーj_security_checkを含む応答 (HTTP 302) を返したことに気付きました。それがブラウザがリダイレクトを行った理由です。Location

正確なシナリオは次のようなものでした:

  • を含むページを開きます<body onunload="some_ajax_here">
  • 同じページにとどまることができるように、別のタブを使用してアプリをログアウトします。
  • 一部の ajaxを呼び出すことができるようにページを更新します。 この AJAX 要求は、アプリケーションのセキュリティで保護された部分であるため、許可されません(ログイン ページの転送されたコンテンツを取得します)。
  • 資格情報を入力すると、ブラウザ ウィンドウに直接ajaxの結果が表示されます。

応急処置として、そして最終的なものであることを願っていますが、その AJAX リクエストに続いて別のリクエストを追加しました。

$.ajax({
    async: true,
    method: "GET",
    url: document.location.pathname + document.location.search
});

そのため、HTML ページ スクリプトは単純にセルフページ リクエストを最後のものにし、最後に使用された HTML ページへj_security_checkの参照を返しLocation、リダイレクトは正常に機能します。おそらく私の説明は明確ではなく、完全ではないか、間違いだらけかもしれませんが、一般的にはそのように見えます. @ChristopherSchultz さん、ありがとうございます。

于 2012-07-31T19:09:58.187 に答える