我正在使用以下代码(之前,它是一个完整的$ .ajax()调用,但我将其简化为$ .post()以消除可能的错误配置,但它没有帮助):
$.post( "/ajax/login.php", { username: username, password: password }, function(data) {
if (data.result === 'success') {
$('#login').submit();
} else {
alert(data.message);
}
}, "json").fail(function(event, jqXHR, settings){
alert("An error occured. Please try again later. All we know: " + JSON.stringify(event) + " " + jqXHR + " " + settings + " " + exception);
});
所以我得到{"readyState":0,"responseText":"","status":0,"statusText:"error"}
。 IE9默认设置,iPhone,iPad和iPad Mac Safari浏览器,有时候是Chrome。
此外,IE9还会挂起浏览器60秒,直到请求超时,然后显示错误消息。
有时IE9会毫无问题地立即通过。
正如您所看到的,没有跨域请求,因为我正在使用相对路径。我能够解决这个问题的唯一方法就是使用GET请求。这很糟糕,因为服务器上的access.log可以存储所有用户密码。
我做错了什么?
答案 0 :(得分:2)
以防万一,确保你没有任何干扰你的ajax请求的执行,可能过早地终止它并导致readyState = 0错误。
您可以在启动请求的函数中使用event.preventDefault()
来执行此操作。
例如:
function buttonClicked(e) {
e.preventDefault();
$.post(...);
}