2011-11-08 3 views
4

私はWebアプリケーションを持っています。 AJAXを使用しています(jQuery経由)。私は、一部のユーザーが$.get経由でWebページ上で自動的に更新する更新を行っていることに気付きましたが、場合によっては更新が行われません。私は私のブラウザ、IE7とFF7に問題を再現することができません「新しいバージョンのページを確認する」とはどう対処できますか?

A. A race condition 
or 
B. Caching 

のいずれかに問題を絞り込みます。私はユーザーのマシンに行って、IE7で「ページの新しいバージョンを確認:すべての訪問」にthe settingをチェックさせました。問題はなくなっているようだ。だから、私はこの設定が当初は「自動」に設定されていると確信しています。

他のブラウザもこの「キャッシュ」をサポートしていますか(または技術的には翻訳されていますか?)

IE7はコードが明示的にサーバーの呼び出しを行うときがキャッシュされないAJAX $.get()要求を聞かせできるほど賢くない理由を任意のアイデア?つまり、既知のバグはありますか、これは「機能」ですか?

クライアント設定を反転させずに無効にすることはできますか?

+0

@psr - その質問は特にHTTPに対処します。そのソリューションをjQueryで動作するものに変換する方法はわかりません。私はこの解決策がこの文脈に適用されることさえも確信していません。しかし、これは私がこの質問が本当にSOに属しているのだろうかと思います。 –

+0

@psr - 私の3番目の質問には良い解決策のようです。ブラウザの設定がどのように問題に関係しているか知っていますか?上記の設定を変更すると別の解決策が得られると仮定しますか? –

+0

@psr Stack Overflowに関する質問は確かに関連していますが、ここではそれを移行することはできません。それは明らかにオフトピックです。 –

答えて

4

私はコメントから回答に移動する必要がありますね。

キャッシングを無効にするJQueryを取得する方法は、this stack overflow questionでカバーされています。

はい、他のブラウザのキャッシュでは、キャッシュをサポートしていない一般的なブラウザについてはわかりません。ただし、ユーザーがこの設定をどのように設定するかにはいくつかの違いがあります。

キャッシングは機能を考慮する必要があると思います。なぜなら、標準でこの動作に対処するかどうかはわかりませんが、キャッシングはリクエストを出しているだけなのでです。

クライアント設定を反転させることなく無効にすることはできませんが、最も簡単な方法は同じURLが2回は表示されないようにすることです。実際には、cacheパラメータをfalseに設定した場合、JQueryが内部的に行う処理です。

ヘッダーを使用してキャッシュを制御できますが、すべてのブラウザがこれを適切にサポートしているとは限りません。私は現在、URLを繰り返すことは決して信頼できるクロスブラウザソリューションではないと考えています。

+2

Cache-Controlを理解していないブラウザはありますか?常に一意のURIを要求すると、ブラウザキャッシュ内のスペースが無駄になります。 –

+0

@DaveMooney私はいくつかのOLDブラウザがそれを無視したと思いますが、プラグマのノーキャッシュヘッダーを尊重した人もいます。キャッシングが発生していないことを確認する必要があるときは、常に両方の習慣を追加します。 –

+0

どのブラウザがどのヘッダに応答するのかわかりませんが、何らかの理由でJQueryがタイムスタンプを追加することによってcacheをfalseに設定していますが、これは確かに非常にレビューされたライブラリです。下位互換性があります。 cacheパラメータの下にあるhttp://api.jquery.com/jQuery.ajax/を参照してください。 – psr

1

$.get()のクエリ文字列が同じURLの場合、ブラウザはキャッシュを返します。正当な理由があります。 常にが新しいコピーを取得するようにするには、$.get()のURLにタイムスタンプ付きの偽のクエリ文字列パラメータを追加します。

+0

これは興味深い考えです。私は私のアプリケーション全体でこれを行う必要はないことを願っています。 URLが変更されなかったため、キャッシュに有効なGET要求の背後にあるロジックは表示されません。クエリパラメータは強力なルックアップを可能にします。これにより、READ操作が時間の経過とともに(または定義された期間)変更される可能性が排除されます。 –

+1

キャッシングを防ぐためにランダムなクエリ文字列パラメータを追加するのに加えて、 'Cache-Control'ヘッダを追加することもできます。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html –

2

Cache-Control HTTPヘッダーをno-cacheに設定できます。これにより、ブラウザーは常にサーバーに要求を発行します。 IEと他のすべてのブラウザは、他のリクエストと同様にjavascriptに由来するHTTPリクエストを処理します。

+0

私は長いこと思い出しても、このヘッダーを尊重していない特定のブラウザがありましたが、これはもはや当てはまりません。私はまだキャッシュコントロールを無視するものは考えられません –

関連する問題