【问题标题】: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 的所有选项。此外,典型服务器响应的完整标头也很有帮助。例如,您可以使用Fiddler 或Firebug 来捕获HTTP 流量。

标签: jquery cross-domain jsonp


【解决方案1】:

这个问题最近也一直困扰着我。我的研究表明 jQuery ajax 调用由 IE 缓存,因此 IE 决定它不需要获取可以解释为什么什么都没有发生的数据。这些 SO 问题帮助了 Stop jquery load response from being cached 和 getjson 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
          相关资源
          最近更新 更多