【问题标题】:IE does not refresh after Ajax get/postsAjax get/posts 后 IE 不刷新
【发布时间】:2011-08-04 12:53:55
【问题描述】:

我有个小问题不知道怎么处理。

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

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

【问题讨论】:

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


    【解决方案1】:
    $.ajax({
            type: 'GET',
            cache: false,
    

    这在编写 cache: false 时有效,在 10 和 11 版的 Internet Explorer 中也可以在 Firefox 和 crome 中使用。谢谢堆栈溢出。

    【讨论】:

      【解决方案2】:

      发生的情况是,您可能会为您的 AJAX 调用向 Web 服务发出 GET 请求。

      Internet Explorer 会自动缓存来自 GET 请求的响应,而其他浏览器会让您决定是否要缓存结果。一旦 IE 成功发出 GET 请求,它甚至不会再发出 AJAX 调用,直到该对象上的缓存过期。解决方案是:

      使用 POST: 一种选择是在应用程序中简单地使用 POST 请求而不是 GET 请求。在客户端和服务器端从 GET 切换到 POST 通常是一个微小的变化。

      响应标头:

      您还可以通过在响应中发送额外的标头来防止缓存。通过将 “Cache-Control” 标头指定为 “no-cache,no-store” 并将其与 Web 服务响应一起返回,您可以指示浏览器不要缓存结果。

      jQuery:

      最后,如果您使用的是 jQuery,您可以指定您不想缓存来自 AJAX 请求的响应,无论是使用 $.ajaxSetup() 方法还是在每个请求的基础上作为缓存:假的。

      【讨论】:

        【解决方案3】:

        在 IE 中使用 ajax 调用它的创建缓存并存储这个旧值。当你收到响应时它的 put 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】:

          尝试在响应头中添加以下内容,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代码

          【讨论】:

          • 在服务器端,在你关闭它自己的响应之前;完成请求处理后(获取数据或做你想做的事)将结果写入响应并将这些参数添加到响应的标头中。
          【解决方案5】:

          尝试将 cache: false 参数设置为您的 AJAX 请求,因为浏览器可能会缓存 GET 请求:

          $.ajax({
              url: '/foo',
              type: 'GET',
              cache: false,
              success: function(result) {
                  // TODO: update the DOM with the results
              }
          });
          

          【讨论】:

          • 我在 IE 上遇到了同样的问题。在某个地方,IE 从 HTML 中删除了 div 标记,我在 Ajax 调用成功时替换了该标记。在另一种情况下,我无法进行调用,因为当我为变量赋值时,我没有这样写 - var variablename = value。
          • 我认为它现在有效!看起来像 Cache: false 做了它的工作。根据另一篇文章,它所做的是插入时间戳,以便 IE 识别更新。不错的一个
          • 我也遇到过类似的问题。如果您决定完全关闭缓存,IE 确实倾向于忽略您。我还没有找到有效关闭缓存客户端的方法。
          猜你喜欢
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 2011-08-03
          • 2013-07-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多