我有一个网站,我可以像这样进行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错误,但我在搜索中找不到它。我真的是唯一一个经历过这种奇怪行为的人吗?
答案 0 :(得分: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 “股票%20market” %20-蓝图%20-empireavenue.com%20-学习&安培; _ = 1313510362469
导致服务器不返回任何数据。
答案 1 :(得分:1)
您确定要调用的网址(/index.php?option=com_content&view=article&id=45&tmpl=component
)在IE9中有效吗?如果你在IE9中加载那个PHP页面,它是否会返回预期的结果?它应该这样做,但值得检查错误是在jQuery调用中,而不是PHP。
此外,POST调用通常是指向'index.php'这样的页面,查询字符串(option=com_content
,view=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)
}
});
将函数删除到其基本部分,您应该能够看到错误的来源。