阻止Chrome缓存AJAX请求

时间:2012-07-13 03:15:37

标签: javascript ajax google-chrome

我已经设置了一个应用程序,它在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 个答案:

答案 0 :(得分:31)

浏览器缓存在不同设置上的行为有所不同。您不应该依赖用户设置或用户的浏览器。也可以让浏览器忽略标题。

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

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

- >更好的方式&好方法:使用当前时间戳或任何其他唯一编号为您的请求添加其他参数。

params = "action=" + action 
         + "&domain=" + encodeURIComponent(domain) 
         + "&preventCache="+new Date();

答案 1 :(得分:14)

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)
?>

答案 2 :(得分:1)

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

根据jQuery API添加“ cache:false”会添加时间戳,如接受的答案中所述:

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

$.ajax({ 
type: "GET",
cache: false, 
});

答案 3 :(得分:0)

下面的代码行为我工作。

$.ajaxSetup({ cache: false });