Изменение метода успеха jQuery $ .ajax () во время запроса - PullRequest
1 голос
/ 10 сентября 2009

В веб-приложении, над которым я работаю, есть вероятность очень продолжительного выполнения запросов ajax.

Я использую метод jQuery $ .ajax, чтобы сделать что-то вроде:

this._xhr = jQuery.ajax({
    type: "GET",
    url: "/path/to/service",
    data: "name=value",
    success: function(data, message){
        // handle a success
    },
    dataType: "json"
});

Есть ли способ изменить успешный обратный вызов после this._xhr.readyState = 2 (загружено) и до this._xhr.readyState = 4 (завершено)

Я попытался изменить this._xhr.onreadystatechange, но обнаружил, что jQuery не определяет onreadystatechange.

1 Ответ

0 голосов
/ 11 сентября 2009

Метод abort звучит как лучший вариант для меня.

Я не знаю много о внутренностях метода ajax, но я могу придумать несколько способов сделать то, что вы хотите. Оба связаны с глобальным состоянием и будут прерываться, если ваш пользователь сможет отправить второй запрос до того, как первый закончится, поэтому я не уверен, что рекомендую их.

Во-первых, вы можете сохранить ссылку на метод, который делает ваш успех успешным, и изменить его:

MySuccessMethod = function(d, m) { /* handle a success */ };

this._xhr = jQuery.ajax({
    type: "GET",
    url: "/path/to/service",
    data: "name=value",
    success: function(data, message){ MySuccessMethod(data, message); },
    dataType: "json"
});


// later...
// user cancels request, so change the success method
MySuccessMethod = function(d, m) { /*print a simple message*/ }

В качестве альтернативы, вы можете просто поместить всю логику в один метод успеха и использовать глобальный флаг, чтобы определить, что делать:

success: function(data, message){
    if (RequestHasBeenCancelled) {
        //display a simple message
    }
    else {
        // handle a success
    }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...