我有一个在Chrome,FF和Safari上运行良好的ajax调用但在IE上总是失败(“成功但没有数据”)。 我检查了服务器日志,并且正确的响应总是触发,但IE仍然显示空响应,并且没有捕获正确的302 http状态代码。 我尝试了很多组合,发现使用contentType时:“text / html; charset = utf-8”IE确实得到了响应,但问题是$ _POST数组是空的,因为发送POST应该是contentType:“application / x -www-form-urlencoded; charset = utf-8“
这是我的javascript:
function someFunc() {
$.ajax({
cache: false,
async: false,
type: 'POST',
dataType: 'html',
contentType: "application/x-www-form-urlencoded; charset=utf-8",
//contentType: "text/html; charset=utf-8",
url: myProtocol + myHost + "/mypage.php",
data: {action: "someAction"},
success: function( data ) {
if (data == ""){
alert("success but no data");
return;
}
// do something...
return;
},
error: function( data ) {
if (data.status == "302"){
// do something...
return;
} else {
// do something...
return;
}
}
});
return;
}
这是我的PHP响应(mypage.php):
function someFunc() {
$.ajax({
cache: false,
async: false,
type: 'POST',
dataType: 'html',
contentType: "application/x-www-form-urlencoded; charset=utf-8",
//contentType: "text/html; charset=utf-8",
url: myProtocol + myHost + "/mypage.php",
data: {action: "someAction"},
success: function( data ) {
if (data == ""){
alert("success but no data");
return;
}
// do something...
return;
},
error: function( data ) {
if (data.status == "302"){
// do something...
return;
} else {
// do something...
return;
}
}
});
return;
}
仅在IE 7-9上,我最终获得了“成功,但没有数据”在其他浏览器上完美无缺。 任何的想法?有人?
谢谢!
答案 0 :(得分:0)
你发送位置标题吗?
header(“Location:”,$ loginUrl);
查看14.30位置:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
答案 1 :(得分:0)
问题在于IE正在尝试遵循重定向位置这不是我想在我的JS中做的事情。 我做的解决方法是将响应更改为200 OK并让JS检测URL是否响应,然后对其执行某些操作:
success: function( data ) {
if (data.match('http://') || data.match('https://')){
window.parent.location = data;
return;
} else {
var url = (window.location != window.parent.location) ? document.referrer: document.location;
window.parent.location = url;
return;
}
}