各サイトがajax経由でデータをロードするマルチサイト設定があります。1 つの詳細を除いて、すべてが完璧に機能しています。戻るボタンを押すと、サーバーからではなく、ブラウザのキャッシュから ajax データがロードされます。ユーザーが 2 番目のページに移動して状態を変更し、前のページに戻って概要の変更を確認する可能性があるため、これは問題です (たとえば、承認されたタスク チャートには、承認されたタスクがもう 1 つ含まれています)。 )。
私が見つけた最も一般的な解決策は、タイム スタンプを ajax リクエストに追加することです
cache: false
(プロパティを介して jQuery で)。ただし、これには、やりたくない http キャッシュ (ステータスコード 304) が無効になるという欠点があります。また、他のシナリオでビューを更新しないようにするには、304 ステータス コードが必要です。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>