22

JavaScriptを使用してページをリロードし、ブラウザのキャッシュからプルしないようにする必要がありますが、代わりにサーバーからページをリロードします。[その間にページの要素が変更されるため]

IEとFFでは、次のコードが正常に機能することがわかりました。

window.location.reload(true);

ただし、ChromeまたはSafariでは機能しません。

私は次のことを試みましたが、役に立たなかった。

window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);

この問題の解決策はありますか?

調査結果

これを調べたところ、この問題はHTTPプロトコルの処理であることがわかりました。

  1. ChromeはPragma: no-cacheHTTPフィールドを使用してリクエストを送信します
  2. Last-Modified: DATE1サーバーはフィールドで応答します
  3. JSはlocation.reload(true)、キャッシュではなくサーバーからのリロードを強制するために使用します
  4. ChromeはIf-Modified-Since: DATE1フィールド付きのリクエストを送信します
  5. サーバーは次のように応答しますHTTP Status 304 Not Modified

サーバーアプリケーションは、動的ページコンテンツの状態の変化に気付かず、したがってを返さないという障害があります200If-Modified-Sinceただし、 JSlocation.reload(true)が呼び出されたときにフィールドを送信するブラウザはChrome/WebKitだけです。

他の誰かが同じ問題に遭遇した場合に備えて、私は自分の調査結果をここに置くと思いました。

4

5 に答える 5

16

このハックを使用できます:

 $.ajax({
        url: window.location.href,
        headers: {
            "Pragma": "no-cache",
            "Expires": -1,
            "Cache-Control": "no-cache"
        }
    }).done(function () {
        window.location.reload(true);
    });
于 2014-11-21T09:45:42.633 に答える
8

ページがキャッシュから読み込まれないようにするために、クエリに一意の番号を追加できます。

window.location = location.href + '?upd=' + 123456;

123456 の代わりに日付を使用することもできます

于 2012-05-23T12:08:32.810 に答える
1

大発見!私はちょうど同じ問題に遭遇しましたが、これは本当に役に立ちます! ただし、あなたの発見に加えて、Chrome は常に location.reload() の GET リクエストを送信しているようです...IE/FF は代わりに最後のリクエストを繰り返しています。

于 2012-07-18T07:00:32.680 に答える
0

試すwindow.location = window.location

于 2012-05-23T12:05:32.040 に答える