防止JQUERY .load缓存

6
在IE9中,使用jQuery .load似乎会从浏览器缓存中获取数据,因此AJAX加载内容的“实时”效果不起作用。是否有任何切换可以强制jQuery .load获取新数据?谢谢!
4个回答

12

如果您使用jQuery的$.ajax低级方法,则可以在其中选择禁用缓存选项。但是,在load方法的简化签名中没有表示这一点。相反,您可以通过确保URL始终唯一来模拟它。可以将当前时间(以毫秒为单位)放在URL的末尾来实现这一点,因为那几乎总是唯一的:

url += '?_=' + Date.now();

(这假设url是一个包含请求URL的字符串并且目前没有任何查询参数。)


为什么不直接使用Date.now()而不是(new Date()).getTime() - Théophile
@Théophile 因为在2011年我写这篇文章时,ES5的支持程度仍然只是适中。现在我们的世界变得更好了,我会进行修改。 - lonesomeday
在2020年真是太棒了。 :) - Théophile

7

或者您可以使用$.ajax并将cache选项设置为false,这会导致jQuery在后台将时间戳附加到请求URL上:

$.ajax( {
    url: "foo.html",
    type: "GET",
    cache: false,
    success: function(html) {
        $("#foo").html(html);
    }
});

2
在您尝试加载的页面内容中,首先发送头文件,这样请求就不会使用缓存...
例如,在代码顶部添加以下行:
<?php
header("Cache-Control: no-cache");
header("Pragma: no-cache");

//Other page contents that have to be loaded

?>

0

或者你可以使用

elem.load(url, "f" + (new Date()).valueOf());

这样每个请求都会在查询字符串中附加一个新的唯一值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接