2013-03-31 74 views
12

我想以此开始。我厌倦了IE浏览器。我有以下代码:jquery Ajax请求无法在IE 10上工作(由于缓存)

$(function() { 
$("#cal").on('click', "#forward", function() { 
    $.ajax({ 
     url: "Home/Calendar?target=forward", 
     type: "GET", 
     success: function (result) { 
      $("#cal").html(result); 
     } 
    }); 
    }); 
}); 

$(function() { 
$("#cal").on('click', "#backwards", function() { 

    $.ajax({ 
     url: "Home/Calendar?target=backwards", 
     type: "GET", 
     success: function (result) { 
      $("#cal").html(result); 
     } 
    }); 
}); 
}); 

这是一个ajax调用一个C#MVC应用程序中的控制器动作。它只是在一个日历的几个月内来回更换html。现在我知道您需要重新附加该事件,因为要拨打html(),这就是为什么我使用带有JQuery 1.7的on()。我也使用了delegate()。在FF中,Chrome按预期工作。在IE 10中它没有。我很茫然。我知道IE浏览器在IE8的代表和JQuery < 1.5中存在问题,但事实并非如此。

有谁知道如何解决这个问题?

+0

对此有帮助吗? http://stackoverflow.com/questions/4100872/jquery-code-not-working-in-ie?rq=1 – Axarydax

+0

nope,我有这个代码到一个不同的文件,我加载Scripts.Render(“〜脚本/ calendarJS.js“),所以它不是该类型的问题。此外,我加入文件加载,但仍然没有任何 – idipous

回答

36

我正在回答这个问题,以供将来为其他人参考。似乎IE浏览器正在缓存AJAX请求,原因是我无法理解。

我注意到使用(令人惊讶的是)开发人员工具IE 10规定我得到了一个304没有修改的响应我的AJAX请求。在Firefox或Chrome中这种情况并非如此(200是响应)。

我在我的AXAJ JQuery函数中添加了cache: false选项,现在它按预期工作。

IE永远不会让我惊叹。

+4

IE是一个缓存怪物 – iGanja

+0

哦,这是一个伟大的+1。':)' – Jai

+1

确切的问题。确切的解决方案。很好。 +1 –

2

简而言之,给出了什么(小)我对这个问题的理解。显然,XmlHttpRequest规范指出XHR GET命令可以像标准网页检索一样运行(例如,点击常规的旧链接),因此可以缓存XHR GET命令。 IE团队选择遵守这一规范,而其他浏览器制造商则没有。虽然我可以看到这种方法的一些逻辑,但我认为我们每天与XHR一起工作的人都会强调说,我们宁愿缓存默认情况下关闭,而不是关闭。 ( - ;

0

我碰到这是很久很久以前的IE ...现在我总是让它现在写点我的ajax调用一个随机尾随键/值对

我也。添加cache: false虽然我本身发现它并不总是这样做应该是什么(好吧,也许它只是IE没有做它应该)

这是我如何设置它们...

$('#trigger').submit(function(e){ 

    e.preventDefault(); 

    var randnum = Math.floor(Math.random()*1001); //magic starts here 

    $.ajax({ 
     type: "POST", 
     url: "folder/file.php", 
     cache: false, 
     data: "random=" + randnum, //pure magic 
     success: function(){ 
      // do stuff here 
     } 

    }); 

}); 
0

也得到了这个问题。事实证明,上述所有修补程序将不起作用,如果POST响应有cache-control: max-age。第一个请求将获取数据,但之后的所有请求(即使您添加一个随机属性)将被304'd。

在这种情况下,IE甚至不会问服务器内容是否改变,它只是假设如果它有一个max-age那么没有意义做请求。

此外XHR规范说,304不应该传递任何数据,所以基本上你会得到POST的空响应(仅在IE 9和10上)。