13

我想从这个开始。我受够了 IE。我有以下代码:

$(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);
        }
    });
});
});

它是对 C# MVC 应用程序中控制器操作的 ajax 调用。它只是来回替换 html 的日历月份。现在我知道您需要由于html()调用而重新附加事件,这就是我使用on()JQuery 1.7 的原因。我也用过delegate()。在 FF 中,Chrome 可以按预期工作。在 IE 10 中它没有。我很茫然。我知道 IE 在 IE8 和 JQuery < 1.5 中存在委托问题,但事实并非如此。

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

4

4 回答 4

38

我正在回答这个问题,仅供其他人将来参考。由于某种我无法理解的原因,IE 似乎正在缓存 AJAX 请求。

我注意到使用 IE 10 提供的(令人惊讶的好)开发人员工具,我得到了对我的 AJAX 请求的 304 not modified 响应。在 Firefox 或 Chrome 中情况并非如此(响应为 200)。

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

IE 永远不会让我感到惊讶。

于 2013-03-31T15:11:03.047 回答
2

简要补充一下,鉴于我对这个主题的理解(很少)。显然,XmlHttpRequest 规范说 XHR GET 命令的行为就像标准网页检索(例如单击常规旧链接),因此可以缓存 XHR GET 命令。IE 团队选择遵守此规范,而其他浏览器制造商则没有。虽然我可以在这种方法中看到一些逻辑,但我认为我们这些每天处理 XHR 请求的人会强调说,我们宁愿默认关闭缓存,而不是打开缓存。(-;

于 2013-06-26T16:35:30.067 回答
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
        }

    }); 

});
于 2013-10-18T04:30:17.297 回答
0

也遇到了这个问题。事实证明,如果 POST 响应具有cache-control: max-age. 第一个请求将获取数据,但之后所有请求(即使您添加随机属性)都将是 304 的。

在这种情况下,IE 甚至不会询问服务器内容是否发生了变化,它只是假设如果它有,max-age那么进行请求就没有意义了。

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

于 2014-02-25T09:46:41.113 回答