1

各サイトがajax経由でデータをロードするマルチサイト設定があります。1 つの詳細を除いて、すべてが完璧に機能しています。戻るボタンを押すと、サーバーからではなく、ブラウザのキャッシュから ajax データがロードされます。ユーザーが 2 番目のページに移動して状態を変更し、前のページに戻って概要の変更を確認する可能性があるため、これは問題です (たとえば、承認されたタスク チャートには、承認されたタスクがもう 1 つ含まれています)。 )。

  1. 私が見つけた最も一般的な解決策は、タイム スタンプを ajax リクエストに追加することですcache: false(プロパティを介して jQuery で)。ただし、これには、やりたくない http キャッシュ (ステータスコード 304) が無効になるという欠点があります。また、他のシナリオでビューを更新しないようにするには、304 ステータス コードが必要です。

  2. 2 番目のオプションはwindow.onbeforeunload、ユーザーがページを離れたときに警告メッセージをバインドして表示することです。これによりブラウザのキャッシュが無効になるため、[戻る] ボタンが押された場合でも (タイムスタンプを追加せずに) リクエストが実行されます。欠点は、ユーザーがページから移動するたびに確認ダイアログが表示されることです (これは非常に面倒です)。セキュリティ上の理由から JavaScript で確認することはできませんし、メッセージを表示しなければキャッシュは無効化されません。

ブラウザキャッシュを無効にする/ ajaxリクエストが実際にサーバーに送られることを確認するためのトリックは他にありますか?

誰かが試したくない場合は、 のサンプル コードを次に示しonbeforeunloadます。ネットワーク トレーサー ツール (Fiddler など) では、ユーザーが [戻る] ボタンでページに移動したときに、要求がサーバーに送信されるように設定します。コメントしてもしreturn 'Hello world';ません。(どちらの場合も、ブラウザー デバッガーのネットワーク トレーサーに表示されますが、これは実際にサーバーに送信されることを表すものではないことに注意してください)。

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>onbeforeunload</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>

<body>    
    <a href="http://google.com">Link away</a>
    <script>
        window.onbeforeunload = function () {
            return 'Hello world';
        } 


        $.ajax({
            type: "GET",
            url: "test", //doesn't matter if it is invalid
            success: function (data) {

            }
        });
    </script>
</body>
</html>
4

2 に答える 2

0

このようにjqueryのajaxリクエストにタイムスタンプを追加できます

data: { 'time': new Date().getTime() }
于 2013-05-07T14:20:34.693 に答える
0

cache:false を ajax 呼び出しに追加して、キャッシングを防ぐことができます

        $.ajax({
        type: "GET",
        url: "test", //doesn't matter if it is invalid
        cache: false,
        success: function (data) {

        }
    });

これは、 &_=timestamp をリクエストの最後に追加することで機能します。それはあなたが求めているサーバーに新しいリクエストを強制的に送信します。また、ブラウザのキャッシュにリクエストを追加するという副作用もあります。したがって、これらのリクエストを大量に行うと、大量の小さな ajax リクエストでキャッシュが汚染される可能性があります。

于 2013-05-07T14:22:00.543 に答える