30

我已经设置了一个应用程序,它在 Opera 和 Firefox 上运行良好,但在 Google Chrome 上它会缓存 AJAX 请求并提供过时的数据!

http://gapps.qk.com.au是应用程序。在 Chrome 中运行时,它甚至不发送 AJAX 请求,但在另一个浏览器中尝试时,它总是执行 AJAX 请求并返回数据。

是否有任何方法(Apache/PHP/HTML/JS)阻止 Chrome 执行此行为?

AJAX 调用:

function sendAjax(action,domain,idelement) {

                    //Create the variables
                var xmlhttp,
                    tmp,
                    params = "action=" + action
                             + "&domain=" + encodeURIComponent(domain)

                    xmlhttp = new XMLHttpRequest(); 
                //Check to see if AJAX request has been sent
                xmlhttp.onreadystatechange = function () {
                    if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
                        $('#'+idelement).html(xmlhttp.responseText);
                    }
                };
                xmlhttp.open("GET", "ajax.php?"+params, true);
                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                //console.log(params);
                xmlhttp.send(params);

            }
sendAjax('gapps','example.com','gapps');
4

4 回答 4

35

浏览器缓存在不同的设置下表现不同。您不应依赖用户设置或用户的浏览器。也可以使浏览器忽略标题。

有两种方法可以防止缓存。

--> 将 AJAX 请求更改为 POST。浏览器不缓存 POST 请求。

--> Better Way & good way:使用当前时间戳或任何其他唯一编号向您的请求添加一个附加参数。

params = "action=" + action 
         + "&domain=" + encodeURIComponent(domain) 
         + "&preventCache="+new Date();
于 2012-07-13T04:02:13.713 回答
15

Javascript 解决方案的另一种替代方法是使用自定义标头:在 PHP 中,它看起来像这样:

<?php
   header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");//Dont cache
   header("Pragma: no-cache");//Dont cache
   header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");//Make sure it expired in the past (this can be overkill)
?>
于 2012-07-15T22:16:50.273 回答
2

当我遇到这个问题时,我正在使用 jQuery ajax 请求。

根据jQuery API添加“缓存:假”添加时间戳,如在接受的答案中解释:

这仅适用于 GET 和 HEAD 请求,但如果您使用 POST,浏览器无论如何都不会缓存您的 ajax 请求。但是对于 IE8,如果需要,请在链接中查看。

$.ajax({ 
type: "GET",
cache: false, 
});
于 2018-07-25T06:15:31.470 回答
1

下面的代码行对我有用。

$.ajaxSetup({ cache: false });
于 2018-02-15T12:03:54.430 回答