为什么这个jQuery Ajax调用仅在IE9中失败(即使在IE8和IE7中工作正常)

前端之家收集整理的这篇文章主要介绍了为什么这个jQuery Ajax调用仅在IE9中失败(即使在IE8和IE7中工作正常)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个网站,我做一个这样的ajax电话:
// perform an ajax request to generate a new subscriber account
            jQuery.ajax({
                type: 'POST',url: '/index.PHP?option=com_content&view=article&id=45&tmpl=component',data: postVars,success: handleResponse,error: function(jqXHR,textStatus,errorThrown) {
                    alert ('response: ' + jqXHR.responseText);
                    alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
                }
            });

所请求的页面不会执行任何操作,只能返回单个数字状态代码,除IE9之外,每个浏览器都可以正常工作.该脚本托管在与其请求的页面相同的域上,因此跨域脚本不应该有任何问题.

我终于了解了发生了什么,但我不知道如何解决它.原来,Ajax请求成功完成,没有问题.我通过使用Fiddler查看网络流量来验证这一点.服务器使用HTTP状态代码为200响应请求,并且主体不包含任何单个数字响应代码.此时,jQuery执行错误处理程序,而不是预期的(在IE9中)的成功处理程序.为什么这样做,我该如何防止呢?这只会发生在IE9中.即使IE8和IE7工作正常,与完全相同的代码!正如你可以看到,我终于诉诸于检测IE9并使用XmlHttpRequest对象(这样做很好).

这似乎是一个jQuery错误,但我在搜索中找不到任何提及.我真的是唯一经历这种奇怪行为的人吗?

解决方法

那我终于找到了这个问题.原来,由于某种原因,jQuery / IE不正确urlencode双引号.请求的URL为:

/search.json?callback=jQuery16105234487927080267_1313510362362\u0026amp;q=stocks或“股票市场”-blueprint -empireavenue.com -learn& _ = 1313510362469

在每个其他浏览器中,jQuery执行ajax请求时,它看起来像:

/search.json?callback=jQuery16105234487927080267_1313510362362\u0026amp;q=stocks或“股票市场”-blueprint -empireavenue.com -learn& _ = 1313510362469

但是无论什么原因在所有版本的IE它出来像这样:

/search.json?callback=jQuery16105234487927080267_1313510362362\u0026amp;q=stocks或“股票市场”-blueprint -empireavenue.com -learn& _ = 1313510362469

这导致服务器不返回任何数据.

猜你在找的jQuery相关文章