jQuery跨域Ajax JSONP调用因某些IE版本中的未知原因而随机失败

时间:2012-02-07 03:44:17

标签: jquery cross-domain jsonp

我正在使用最新版本的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调用时遇到问题。即使经过多次尝试。即用户要么遇到问题,要么不会失败然后工作或工作失败。只有一个或另一个。

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

    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响应 等等

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

4 个答案:

答案 0 :(得分:1)

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

此外,它可能是TCP / IP v6的问题。我们在相同的环境中遇到了IE的一些问题,症状几乎总是零星的。

答案 1 :(得分: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 :(得分:0)

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

答案 3 :(得分:0)

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