Jquery.get() 在 IE8/9 中不起作用。不会加载缓存页面 304 未修改

标签 jquery ajax caching internet-explorer-8 http-status-code-304

  • 代码点火器版本“2.0.3”
  • Jquery 1.7
  • Jquery 历史记录插件

我有一个以 ajax 方式构建的 CodeIgniter 应用程序。我有一个功能如下:

$(document).on('click','.ajax_link',function(e){
    //Stop the normal href action
    e.preventDefault();

    //Grab the destination URL
    var new_url = $(this).attr('href')
    
    //Grab the content via ajax and pass it to the history change function
    $.get(base_url+new_url,function(data){
        History.pushState({
            content:data.content,
            url:data.url
        }, data.title, data.url);
        //Refresh some site variables
        refresh();
    },'json');
});

它所做的一切都是捕获对 ajax_link 类的 anchor 元素的点击,并将响应发送到一个函数,该函数处理该响应数据在页面中的放置。

这适用于 Chrome 和 FF。我单击链接,jQuery 发出 get 请求,我返回一个 JSON 对象,我的 History.pushState() 函数将一些 json 数据注入(inject)到我的页面中。

我遇到的问题是在 IE8 中。本质上发生的事情是当我第一次打开应用程序时,链接有效,但它们只有效一次。我第二次点击链接时:

  • ajax 是否GET
  • 收到 304(未修改)响应
  • 不调用 jQuery.get() 回调函数,因此停止运行。

如果我清除缓存,它会再次工作。所以我的假设是 IE 正在执行 get 请求,但随后它发现它过去已经请求过完全相同的文件......因此完全停止了该过程。

有人知道这个问题的解决办法吗?我查看了 304 错误以及 ajax 错误和 IE 中的缓存错误,但尚未发现与我的问题相同的问题。

非常感谢任何帮助

(在 Windows 虚拟机 IE8 和 Internet Explorer 9 中的 IE 8 模式上测试)

已解决

只需将以下代码添加到我的 document.ready 函数中,问题就消失了。

$.ajaxSetup ({cache: false});

最佳答案

更改此行:

var new_url = $(this).attr('href')

对此:

var new_url = $(this).attr('href') + '?' + Math.random();

这称为“CacheBuster”,可有效创建类似于以下内容的 url:

"website.com/page.html?1241233"

每次点击“.ajax_link”时,该随机数都会不同,因此 IE 会认为它是一个新页面并正确获取它。

关于Jquery.get() 在 IE8/9 中不起作用。不会加载缓存页面 304 未修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903221/

相关文章:

javascript - 当一组 polymer 纸张切换按钮中的一个被按下时触发事件

javascript:检查标签是否彼此相邻

javascript - 在线图像编辑器 - Ajax 还是 Flex/Flash?

javascript - 从 AJAX 函数获取变量值到外部

javascript - 将自定义类添加到 jQuery UI 的 ui-autocomplete Combobox Div

javascript - ajax请求后页面刷新

css - 在 Vaadin 8.1 元素中忽略版本控制的 'styles.scss.cache' 文件?

caching - Primefaces 媒体展示旧版 PDF

c# - 在返回 WCF 流的同时流式传输到文件?

jQuery:按数据属性选择某些元素失败 - 为什么?