我有一个使用jQuery ajax获取一些数据的Web应用程序。在这个网站上,我还有一个Logger,它会在发生错误时向我报告。
我经常在ajax调用上遇到此错误:
{ “readyState的”:0 “responseText的”: “”, “状态”:0 “状态文本”: “错误”}
问题是这个错误是随机的,我无法重现它。我得到了所有ajax脚本。请求是在同一个来源和我已定义"Access-Control-Allow-Origin", "*"
的服务器上进行的。
所有浏览器都会收到此错误:
jQuery ajax代码:
$.ajax({
url: 'MyUrl',
type: 'POST',
dataType: "json",
data: {dataVars},
error: function(response, ajaxOptions, thrownError) {
log.error( 'StringError: ' + ajaxOptions + '\n\nthrownError: ' + JSON.stringify(thrownError) + '\n\nResponse: ' + JSON.stringify(response));
},
success: function(res){
}
});
请求被执行到servlet。可能是什么问题?
答案 0 :(得分:2)
来自W3schools:
readyState=0
表示未发送请求。 (您的broswer未连接到目标服务器)。
这意味着套接字未打开:没有TCP握手,因此目标网址尚未到达......
所以检查myUrl
的有效性(它是一个好的域吗?没有跨域),还有客户端的连接(代理?如果myUrl
是安全的/使用其他端口,也许它只是没有打开...)
我认为问题可能出在服务器端,如果它是随机的。但特别是myUrl
,如果你能得到网页......
但错误很奇怪,如果它来自同一台服务器!
无论如何,我认为这是因为你的客户端和目标服务器之间的连接不稳定,所以也许你可以尝试增加请求的超时,或者在出错时重试它(例如使用递归循环):
var remainingRetry = 3; //or something else
function handleRequest()
{
$.ajax({
url: 'MyUrl',
type: 'POST',
dataType: "json",
data: {dataVars},
error: function(response, ajaxOptions, thrownError) {
if (remainingRetry)
{
remainingRetry--;
setTimeout(handleRequest, 1000); //timeout between two tries
}
else log.error( 'StringError: ' + ajaxOptions + '\n\nthrownError: ' + JSON.stringify(thrownError) + '\n\nResponse: ' + JSON.stringify(response));
},
success: function(res){
}
});
}
答案 1 :(得分:0)
我之前遇到过同样的问题,就我而言,问题是
在我的第一个请求之前,其他js函数重定向到另一个页面的机会实际上已经取消或取消了我的请求
之类的东西
function redirectToAnotherPageFn () {
window.location = "/otherpage.html";
};