Javascript 阻止浏览器缓存AJAX请求

Javascript 阻止浏览器缓存AJAX请求,javascript,ajax,google-chrome,Javascript,Ajax,Google Chrome,我已经安装了一个应用程序,它在Opera和Firefox上运行得非常好,但在GoogleChrome上它会缓存AJAX请求并提供过时的数据 是应用程序。在Chrome中运行时,它甚至不发送AJAX请求,但在另一个浏览器中尝试时,它总是执行AJAX请求并返回数据 是否有任何方法(Apache/PHP/HTML/JS)阻止Chrome执行此行为? AJAX调用: function sendAjax(action,domain,idelement) { //C

我已经安装了一个应用程序,它在Opera和Firefox上运行得非常好,但在GoogleChrome上它会缓存AJAX请求并提供过时的数据

是应用程序。在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');

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

有两种方法可以防止缓存

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

-->更好的方法&更好的方法:使用当前时间戳或任何其他唯一数字向请求中添加一个附加参数

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

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

下面的代码行对我很有用

$.ajaxSetup({ cache: false });

遇到这个问题时,我正在使用jQueryAjax请求

根据添加“cache:false”添加了一个时间戳,如接受答案中所述:

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

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

PHP脚本返回的标题是什么?请确保它们不允许缓存,并返回适当的内容类型。我本来以为这是一个解决方案,但我认为它不雅观,好的,谢谢!:)只是为了信息和心灵的平静。当您说preventCache到ajax调用时,主要框架都使用了这个解决方案,其中一个例子是DOJO。把日期改成数字真的吗?对我来说,这似乎是一种“黑客”方法,它很有效(很棒),但我本以为会有一种更好的方法,作为“官方”方法。再次感谢!:)这是一个老问题,但它仍然出现在我的谷歌搜索查询的前三名结果中。发送自定义服务器头(来自@Mattisdada的回复)是永远不应该缓存的文件的最佳方式。对于偶尔需要刷新的静态文件,请发送一个带有要加载的文件版本的参数(例如,
params+='&preventCache=1.0.1'
),而不是当前时间戳。缓存仍然有效,更改版本字符串将刷新文件。这是否适用于所有浏览器?如果是这样的话,这比查询参数hack要优雅得多。。。