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

rus*_*nge 10 ajax jquery internet-explorer-9

我有一个网站,我在这里做一个像这样的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'));
                }
            });
Run Code Online (Sandbox Code Playgroud)

被请求的页面没有做任何事情,只返回一位数的状态代码,它适用于除IE9之外的每个浏览器.该脚本与其请求的页面托管在同一个域中,因此跨域脚本编写不会出现任何问题.

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

这对我来说似乎是一个jQuery错误,但我在搜索中找不到它.我真的是唯一一个遇到这种奇怪行为的人吗?

rus*_*nge 7

好吧,我终于找到了问题所在.事实证明,由于某种原因,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

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