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

时间:2012-01-17 23:35:50

标签: 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类捕获对锚元素的点击,并将响应发送到处理该响应数据放入页面的函数。

适用于Chrome和FF。我点击链接,jQuery发出get请求,我得到一个JSON对象,我的history.pushState()函数将一些json数据注入我的页面。

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

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

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

有人知道解决方案吗?我已经看过在IE中提到304错误和ajax和缓存的错误,但是还没有找到与我相同的问题。

任何帮助非常感谢

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

解决

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

$.ajaxSetup ({cache: false});

2 个答案:

答案 0 :(得分:5)

更改此行:

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

对此:

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

这称为“CacheBuster”,可以有效地创建类似于:

的URL
"website.com/page.html?1241233"

对于“.ajax_link”的每次点击,该随机数都会有所不同,因此IE会认为它是一个新页面并正确使用。

答案 1 :(得分:0)

我们遇到IE(和Opera)不喜欢“application / json”的问题,我们必须将响应呈现为“text / plain”。