在Ajax获取/发布后,IE不会刷新

时间:2011-04-13 08:54:05

标签: jquery ajax asp.net-mvc-3 internet-explorer-9

我有一个小问题,我不知道如何处理。

我写了一些jQuery post / gets,它们在FF,Opera和Chrome中运行良好。但是当从资源管理器(任何版本)运行时,请求中的更新内容不会加载到浏览器中。我使用了开发人员工具并调试了脚本,并使用正确的参数发送请求。这些操作甚至已被执行,但在我清除浏览器历史记录或打开/关闭浏览器之前,这些操作都不可见。

这可能是一个愚蠢的问题,但我如何让IE识别这些请求的变化?

5 个答案:

答案 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。谢谢堆叠溢出。