随机jquery ajax错误readyState = 0

时间:2016-07-21 08:03:25

标签: javascript java jquery ajax

我有一个使用jQuery ajax获取一些数据的Web应用程序。在这个网站上,我还有一个Logger,它会在发生错误时向我报告。

我经常在ajax调用上遇到此错误:

  

{ “readyState的”:0 “responseText的”: “”, “状态”:0 “状态文本”: “错误”}

问题是这个错误是随机的,我无法重现它。我得到了所有ajax脚本。请求是在同一个来源和我已定义"Access-Control-Allow-Origin", "*"的服务器上进行的。

所有浏览器都会收到此错误:

  • Safari 9
  • Chrome
  • Internet explore 11
  • 等...

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。可能是什么问题?

2 个答案:

答案 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"; 
    };