2016-06-15 6 views
2

私は本当に説明できない状況に遭遇し、ブラウザがどのようにAJAXリクエストを処理しているかを誤解していると思うようになっています。ブラウザがタブ間でAJAXリクエストを処理する方法

参考までに、私はCodeigniterをApacheサーバー上で実行していて、jQueryを使用してAJAXリクエストを実行していると仮定できます。問題のブラウザはChromeです。

私のアプリケーションには、いくつかの異なるグラフを表示するためのページがあります。このページに移動すると、ページに表示されるグラフに関する特定の情報が、URLのGETパラメータとしてサーバーに渡されます。これらのパラメータは、いくつかのデータの弾性検索クエリを起動し、操作され、クライアントに戻ってグラフを描画します。このアプローチは、1ページをレンダリングするときに問題なく動作します。

ただし、いくつかのタブが開いている場合。 5つまたは6つのタブを開いて、別のグラフを表示する必要があるとします(いくつかのことは予測できません)。タブのいくつかは同じデータをレンダリングします。何らかの理由で複数のタブを開いているのではないかと思います。 Chromeは複数のタブでAJAXレスポンスを受信して​​います。応答が返ってくるのを見て、正しい応答であるかどうかにかかわらず各タブに送信します。これにより、複数のタブにまたがってグラフが表示されます。

私が持っている主な質問は、クロム(または他のブラウザ)が複数のタブ間でどのように接続を処理するかということです。セッションを永続させることができるので、明らかにそれを単一の接続として扱います。また、AJAXリクエストはどのように識別されていますか?ユニークな識別子を渡して試してみてください。しかし、ブラウザが返された最初の応答を受け取り、それを受け入れているかのように見えるので(それがうまくいくかのように)、動作しないように見えます。混乱し、複数のタブを開いて応答を待っているときに接続が確立されていることを認識していますか?

多くの疑問がありますが、誰かがこれを解決する方法についての洞察や助けを提供できれば非常に感謝します。

編集:この動作を防止し、要求元のタブに固有のデータを正しく受信する方法に最も興味があります。

+0

何か他のことが起こっている必要があります。ブラウザは、異なるAJAXリクエストごとに一意のイベントリスナを作成します。実際の要求と応答を表示するには、デバッガの[ネットワーク]タブを使用します。多分、あなたのリクエストはキャッシュされていますか? – dave

+0

これは私がチェックしてきたものです。私はリクエストがラインのどこかにキャッシュされていると仮定し、それを止めるためにできること全てをしようとしていましたが、それは何とかして永続しています。 – pipedreams2

+0

この問題はChromeでのみ発生していますか? –

答えて

0

私のアプリの中には、同様の問題がありました。私たちがしていた作業は、タブの代わりに新しいウィンドウを作成して、各ブラウザがそれぞれのセッションに立つようにしていました。このようにAJAXは混乱することはありません。タブベースの設計が必要な他のアプリケーションを修正するために私たちが管理した唯一の方法は、各タブごとに固有のセッションIDを作成することでした。そうすれば、AJAXは特定のセッションIDを指すことができます。タブの方法では、html5のセッションストレージが必要です。

関連する問題