我有一个网站,我像这样拨打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双引号。要求的网址是:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks或“股市” -blueprint -empireavenue.com -learn&_ = 1313510362469
在jQuery执行ajax请求时,在所有其他浏览器中,它看起来像:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20%22stock%20market%22%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
但是无论出于什么原因,所有版本的IE都这样显示:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20"stock%20market"%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
这导致服务器不返回任何数据。