【问题标题】:jQuery Cross-Domain Ajax JSONP Calls Failing Randomly For Unknown Reasons In Some IE Versions在某些 IE 版本中,由于未知原因,jQuery 跨域 Ajax JSONP 调用随机失败
【发布时间】:2012-02-28 13:17:50
【问题描述】:

我正在使用最新版本的 jQuery 1.7.1 进行跨域 Ajax 调用。带有 JSONP 响应。

我已经对它进行了广泛的测试: Win XP 和 Win 7 上的 Safari、Chrome、Opera、Firefox、IE6 IE7 IE8 IE9(在兼容模式下和非兼容模式下)都可以完美运行。永远不会在多次测试中失败。所有这些都使用启用 JavaScript 和 Cookie 的标准默认设置。

在生产中,调用很少会失败,但我有数百个用户中有几个。可能是 50 或 100 分之一。我无法理解这一点,因为在所有情况下:

  • 用户在使用 jQuery 进行非跨域 ajax 调用时没有问题。 (即非跨域调用有效,因此它们必须启用 JavaScript 并且可以支持 ajax)。

  • 用户只遇到了使用 jQuery 进行跨域 ajax 调用的问题。即使经过多次尝试。 IE。用户要么有问题,要么没有,它不会失败然后工作或工作然后失败。只有一个或另一个。

  • 以下是受影响用户的用户代理字符串示例:

    Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;Trident/5.0;FunWebProducts)

    Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;GTB7.2;.NET CLR 2.0.50727;.NET CLR 3.5.30729)

    Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0; CPNTDF;ibrytetoolbar_playbryte;.NET4.0C)

好像只影响IE,其他浏览器没遇到过问题。

  • 如果他们使用不同的浏览器,问题就会消失,我告诉他们安装 Chrome。

  • 问题不可能是连接、计算机或基于操作系统的问题,因为更改浏览器有效。

我只能排除一定是只能在IE上找到的设置。有人遇到过这个问题吗?有谁知道哪个 IE 设置可能会阻止带有 JSONP 响应的跨域 Ajax 调用。

这不可能是通常的 AJAX/JSONP/跨域问题,因为当浏览器设置为默认时不会发生这些问题,也因为我已经以正确的方式完成了它: * 最后的时间戳字符串以停止超级缓存 * JSONP 响应 等等等等

我可以确认呼叫根本没有触发。

【问题讨论】:

  • 您应该包含您使用的代码。为了能够帮助您,至少应该查看您使用的jQuery.ajax 的所有选项。此外,典型服务器响应的完整标头也很有帮助。例如,您可以使用FiddlerFirebug 来捕获HTTP 流量。

标签: jquery cross-domain jsonp


【解决方案1】:

这个问题最近也一直困扰着我。我的研究表明 jQuery ajax 调用由 IE 缓存,因此 IE 决定它不需要获取可以解释为什么什么都没有发生的数据。这些 SO 问题帮助了 Stop jquery load response from being cachedgetjson returning cached data in IE8

似乎禁用缓存的额外显式 ajax 设置有助于 IE 获取消息。当 json 是数据类型时,jQuery 中的所有 ajax 调用都应该避免缓存,但我不相信它可以工作。这是似乎对我有帮助的代码,您在 getJSON() 或 ajax() 调用之前插入了该代码。

$.ajaxSetup({ cache: false });

【讨论】:

    【解决方案2】:

    使用 Fiddler2 检查 http 请求和响应,并查看来回通信​​的内容。

    另外,这可能是 TCP/IP v6 底层的问题。我们在相同的环境中遇到过一些 IE 问题,而且症状几乎都是零星的。

    【讨论】:

      【解决方案3】:

      这有点 javascript 计时问题。因为事情以他们认为在 javascript 中的任何顺序执行,所以其他地方的问题可能会影响您的威胁。 IE 你提出了你的 jsonp 请求,但是在某个地方可能会在你的线程中爆炸并导致请求出现问题。我的猜测可能是您在某处使用 innerHtml 或 innerText ,因为它们有时不受支持,有时它们受支持。

      【讨论】:

        【解决方案4】:

        我感觉这与用户安装的工具栏/扩展程序/间谍软件有关。在提供的 3 个 UA 中,一个具有 FunWebProducts,一个具有 ibrytetoolbar_playbryte,另一个具有 Google 工具栏,这可能会导致问题,或者可能是他们系统上的其他东西可能正在拦截请求。您可以尝试安装各种 IE 工具栏,看看是否可以重现问题,但这可能会带来不必要的问题。解决它可能是不可能的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 2012-10-03
          • 2014-11-23
          • 2013-04-04
          • 1970-01-01
          • 2012-04-14
          • 2021-07-23
          相关资源
          最近更新 更多