Как отловить потерянное соединение в AJAX звонке - PullRequest
0 голосов
/ 18 октября 2011

У меня есть следующий код:

sendRequest : function(data){
                var me = this;
                this._createData(data);
                try{
                    this.req.open(this.method,this.page,true);
                    this.req.onreadystatechange=function()
                    {
                        if (this.readyState==4 && this.status==200)
                        {
                            if(this.responseText)
                                var response = eval('(' + this.responseText + ')');
                            else 
                                response = null;
                            me.callBack(response);
                            return false;
                        }
                    }
                    this.req.send(this.data);
                } catch(err){
                    me.callBack(response);
                }
            },

Он работает нормально и возвращает то, что, как я ожидаю, вернется, но когда соединение потеряно, оно не переходит в блок catch. Я хочу знать, как перехватить запрос, когда страница сервера недоступна.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вот пример из Страница документа Microsoft для onreadystatechange:

function reportStatus()
{
    if (oReq.readyState == 4 /* complete */) {
        if (oReq.status == 200 || oReq.status == 304) {
            alert('Transfer complete.');
        }
        else {
            // error occurred
        }
    }
}

var oReq = new XMLHttpRequest();
oReq.open("GET", "http://localhost/test.xml", true);
oReq.onreadystatechange = reportStatus;
oReq.send();

Посмотри, где написано // error occurred.

На этой странице документации MDN .

есть похожий пример кода.
0 голосов
/ 18 октября 2011

Я устанавливаю setTimeout перед отправкой вызова Ajax:

var timeout = window.setTimeout("functionToCallOnTimeout()", 2000);

внутри functionToCallOnTimeout Я прекращаю вызов:

oReq.current=null;

При положительном ответе я сбрасываю время ожидания:

timeout = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...