【问题标题】:Jquery Ajax requests not working on IE 10 (due to cache)Jquery Ajax 请求在 IE 10 上不起作用(由于缓存)
【发布时间】:2013-03-21 18:30:46
【问题描述】:

我想从这个开始。我受够了 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

有人知道怎么解决吗?

【问题讨论】:

  • 不,我有这个代码到另一个文件,我用 Scripts.Render("~Scripts/calendarJS.js") 加载,所以这不是类型的问题。我还添加了文档加载,但仍然没有

标签: c# jquery internet-explorer asp.net-mvc-4


【解决方案1】:

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

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

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

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

【讨论】:

  • 哦,那是一个很棒的 +1。 :)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    很久很久以前,我在使用 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
            }
    
        }); 
    
    });
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        相关资源
        最近更新 更多