首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

AJAX 快取問題解決四大招

     編輯:PHP 相關知識

AJAX 快取問題解決四大招

瀏覽器對 GET 請求預設啟用快取,導致相同參數請求返回舊資料。本文提供四種解決方案,涵蓋前端與後端。

方案一:URL 附加隨機參數(最常用)

// jQuery
$.ajax({
    url: '/api/data',
    data: { t: Date.now() }, // 或 Math.random()
    // ...
});

// 原生 fetch
fetch('/api/data?t=' + Date.now())
    .then(res => res.json());

方案二:設定請求標頭 If-Modified-Since: 0

// jQuery
$.ajax({
    url: '/api/data',
    headers: { 'If-Modified-Since': '0' },
    // ...
});

// XMLHttpRequest
xhr.setRequestHeader('If-Modified-Since', '0');

方案三:後端回應標頭禁用快取

<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // 過去時間
header('Pragma: no-cache');
// 輸出 JSON...
?>

方案四:jQuery cache: false 選項

$.ajax({
    url: '/api/data',
    cache: false, // 內部自動加 _=timestamp 參數
    success: function(data) { ... }
});

比較與建議

方案優點缺點適用場景
隨機參數通用、無需後端配合URL 變長、日誌較雜大多數 GET 請求
If-Modified-Since標準 HTTP 機制部分舊瀏覽器/代理可能忽略需精確控制快取驗證
後端標頭徹底禁用、無前端依賴影響所有客戶端、可能阻礙合理快取極機密資料、即時資訊
jQuery cache:false程式碼簡潔僅限 jQuery、GET 有效jQuery 專案快速接入

POST 請求快取

HTTP 標準規定 POST 不快取,但部分舊版 IE 仍會快取 POST。建議統一加上 Cache-Control: no-cache 回應標頭。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved