首页 > 解决方案 > 网络连接丢失时处理 Ajax

问题描述

网络连接丢失时如何处理 Ajax。Ajax 不返回任何状态并保持在“(待定)”状态。

$.ajax()我用方法试过这个

.error: function(err){
console.log(err)
}

并且还尝试了以下错误:

 function makeXMLHttpRequest(url, data, callback) {
        var request = new XMLHttpRequest();
        request.onreadystatechange = function() {
            console.log("makeXMLHttpRequest:",request)
            if (request.readyState == 4 && request.status == 200) {
                //clearTimeout(xhrTimeout);   // Timeout when the  upload complete

            }
            if(request.status >= 400 && request.status <= 511)
            {
                var error = new Error(request.responseText)
                error.code = xhr.status

                request.abort();
            }
        };

request.onerror = function(XMLHttpRequest, textStatus, errorThrown) {

            if (XMLHttpRequest.readyState == 4) {
                // HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)

            }
            else if (XMLHttpRequest.readyState == 0) {
                // Network error (i.e. connection refused, access denied due to CORS, etc.)
            }
            else {
                // something weird is happening

            }

        }

任何人都知道如何处理“网络连接丢失”的ajax?

请注意:网络连接丢失与超时不同。超时时,我们在 ajax 中有可用的事件,但我不是在寻找它。

标签: javascriptajax

解决方案


function makeXMLHttpRequest(url, data, callback) {
        var request = new XMLHttpRequest();
        request.timeout = 3000; // in milli seconds, so 3 seconds to wait before it timesout
        request.onreadystatechange = function() {
            console.log("makeXMLHttpRequest:",request)
            if (request.readyState == 4 && request.status == 200) {
                //clearTimeout(xhrTimeout);   // Timeout when the  upload complete

            }
            if(request.status >= 400 && request.status <= 511)
            {
                var error = new Error(request.responseText)
                error.code = xhr.status

                request.abort();
            }
        };
request.ontimeout = function(error) {
    //handle the timeout
};
request.onerror = function(XMLHttpRequest, textStatus, errorThrown) {

            if (XMLHttpRequest.readyState == 4) {
                // HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)

            }
            else if (XMLHttpRequest.readyState == 0) {
                // Network error (i.e. connection refused, access denied due to CORS, etc.)
            }
            else {
                // something weird is happening

            }

        }

请参阅 MDN XMLHttpRequest 超时链接


推荐阅读