我有一个小问题,我不知道如何处理。
我写了一些jQuery post / gets,它们在FF,Opera和Chrome中运行良好。但是当从资源管理器(任何版本)运行时,请求中的更新内容不会加载到浏览器中。我使用了开发人员工具并调试了脚本,并使用正确的参数发送请求。这些操作甚至已被执行,但在我清除浏览器历史记录或打开/关闭浏览器之前,这些操作都不可见。
这可能是一个愚蠢的问题,但我如何让IE识别这些请求的变化?
答案 0 :(得分:13)
尝试将cache: false
参数设置为AJAX请求,因为浏览器可能会缓存GET请求:
$.ajax({
url: '/foo',
type: 'GET',
cache: false,
success: function(result) {
// TODO: update the DOM with the results
}
});
答案 1 :(得分:2)
发生的事情是,您可能会针对 AJAX 电话向网络服务发出GET请求。
Internet Explorer明智地会自动缓存来自GET请求的响应,而其他浏览器会让您决定是否要缓存结果。一旦IE成功发出 GET 请求,它将不再进行 AJAX 调用,直到缓存在该对象上过期。解决方案是:
使用 POST: 一种选择是在应用程序中简单地使用POST请求而不是GET请求。在客户端和服务器端,从GET切换到POST通常是一个小改动。
响应标题:
您还可以通过发送其他标头以及响应来阻止缓存。通过使用值“Cache-Control”
指定“no-cache,no-store”
标头并使用Web服务响应返回它,您可以指示浏览器不要缓存结果。
<强> jQuery的:强>
最后,如果您正在使用jQuery,则可以指定您不希望使用$ .ajaxSetup()方法或基于每个请求作为缓存来缓存来自AJAX请求的响应:假的。
答案 2 :(得分:1)
尝试将以下内容添加到响应标头中,IE将不再缓存:
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "must-revalidate");
response.addHeader("Cache-Control", "Post-Check=0");
response.addHeader("Cache-Control", "Pre-Check=0");
response.addHeader("Expires", "Mon, 1 Jan 2006 05:00:00 GMT");//in the past
注意:代码是java代码
答案 3 :(得分:0)
在使用ajax的IE中调用其创建缓存并存储这些旧值。当您收到响应时,将其设置为catch值。因此,您可以将缓存设为false。
$.ajaxSetup({ cache: false });
OR
$.ajax({ url: your need url,
cache: false,
type: 'get',
data:'your parameters',
success: function(result) {
//put your code here...
}
});
你可以在你的代码中使用它们。但第一个答案是最好的。
答案 4 :(得分:0)
$.ajax({
type: 'GET',
cache: false,
这在编写cache: false
时有效,适用于版本10和11的Internet Explorer,也适用于firefox和crome。谢谢堆叠溢出。