我正在使用最新版本的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响应 等等
我可以确认呼叫根本没有发射。
答案 0 :(得分:1)
使用Fiddler2检查http请求和响应,并查看来回传达的内容。
此外,它可能是TCP / IP v6的问题。我们在相同的环境中遇到了IE的一些问题,症状几乎总是零星的。
答案 1 :(得分: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 :(得分:0)
这有点javascript计时问题。因为事情按照他们在javascript中的任何顺序执行,其他地方的问题可能会影响您的威胁。 IE你做了你的jsonp请求,但在某个地方某些东西可能在你的线程中爆炸并导致请求的问题。我的猜测可能是你在某处使用innerHtml或innerText,因为有时候它们不受支持,有时它们也不支持。
答案 3 :(得分:0)
我感觉这与用户安装的工具栏/扩展/间谍软件有关。在提供的3个UA中,一个具有FunWebProducts,一个具有ibrytetoolbar_playbryte,另一个具有Google工具栏,这可能导致问题,或者它可能是其系统中可能拦截请求的其他内容。您可以尝试安装各种IE工具栏,看看问题是否可以重现,但这可能会带来不必要的问题。可能无法解决这个问题。