【问题标题】:Chrome Refuses to make Ajax Request to same url after request is aborted请求中止后,Chrome 拒绝向相同的 url 发出 Ajax 请求
【发布时间】:2013-09-14 13:53:49
【问题描述】:

我很确定这是 chrome 中的一个错误,因为它不会在 IE 10 中发生并且它最近才开始,但基本上是在对 URL 进行 AJAX 调用并且用户在请求期间刷新浏览器时,所有之后对相同 url 的请求将失败。即使我再次刷新浏览器,请求也会失败。我可以解决它的唯一方法是添加一个时间戳以使每个请求都是唯一的,但这似乎是一个 hack。我在这里错过了什么吗?

如果您有一个中止的请求,这将永远不会再次起作用:

        $.getJSON("realTimeActivity/GetRealTimeData",
            function (result) {
                // Do stuff
            }
        ).fail(function (jqXHR, textStatus, errorThrown) {
            // No error message comes back
        })

但这每次都有效:

    $.getJSON("realTimeActivity/GetRealTimeData?u=" + (new Date).getTime(),
        function (result) {
            // Do stuff
        }
    ).fail(function (jqXHR, textStatus, errorThrown) {
        // No error message comes back
    })

我可以离开它,但我想了解为什么会这样并且不需要这个 hack。

【问题讨论】:

    标签: javascript asp.net ajax google-chrome iis-express


    【解决方案1】:

    这是因为缓存,并且因为 URL 和以前一样,所以它为什么忽略它。通过附加时间戳,使 URL 不同,每个请求都会通过。

    另一个选项是将缓存设置为 false(使用 .ajax()),这很有趣,只是为您附加了一个时间戳。

    .ajax() docs

    $.ajax({
        /* ... */
        cache: false
    });
    

    【讨论】:

    • 太棒了!在尝试附加网址之前,我认真地花了几天时间并在多个论坛上发布。现在我知道为什么时间戳修复它了!
    • 有什么理由想要缓存 ajax 请求?我想知道是否普遍禁用它会导致 asp.net 中的标准更新面板 ajax 请求出现问题。
    • 我问是因为如果我使用 getJSON 看起来我必须通过所有请求的设置来禁用它,而不是像使用 $.ajax 那样仅针对每个请求。
    • 你很可能不想让它全球化,但更多的是你根据具体情况关闭的东西。大多数时候,无论如何您都希望它被缓存,如果您不断更改/更新数据,那么您当然希望它关闭! (就像你的情况一样)。我只有一个快速的功能,让它对我来说是随机的,我附加 url + rand() 来关闭缓存。
    猜你喜欢
    • 2018-11-30
    • 2013-11-14
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2019-01-18
    • 2011-01-22
    • 2019-07-27
    相关资源
    最近更新 更多