为什么这个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外,它适用于所有浏览器。 该脚本与其请求的页面托管在同一个域中,因此跨域脚本编写不应存在任何问题。

我终于找到了正在发生的事情,但我不知道如何解决它。 事实certificate,Ajax请求成功完成,没有任何问题。 我通过使用Fiddler来查看网络流量来validation这一点。 服务器使用HTTP状态代码200响应请求,并且正文除了单个数字响应代码之外不包含任何内容。 此时,jQuery执行error handling程序,而不是预期的成功处理程序(在IE9中)。 为什么这样做,我该如何防止它? 这只发生在IE9中。 即使IE8和IE7使用完全相同的代码也能正常工作! 正如您所看到的,我最终使用了检测IE9并使用XmlHttpRequest对象来执行此操作(顺便说一句,它工作正常)。

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

好吧,我终于找到了问题所在。 事实certificate,由于某种原因,jQuery / IE没有正确地urlencode双引号。 请求的URL是:

/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

这导致服务器没有返回任何数据。

您确定要调用的URL( /index.php?option=com_content&view=article&id=45&tmpl=component )在IE9中有效吗? 如果你在IE9中加载那个PHP页面,它会返回预期的结果吗? 它应该这样做,但是值得检查错误是在jQuery调用中,而不是PHP。

此外,POST调用通常是指向’index.php’之类的页面,查询字符串( option=com_contentview=article等)作为变量postVars发送。

尝试使用以下内容:

 $.ajax({ type: "POST", url: "index.php", data: { option : com_content, view : article, id : 45, tmpl : component }, success: function(msg){ console.log(msg); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus) } }); 

将函数删除到其基本部分,您应该能够看到错误的来源。