Почему jqXHR.abort () в beforeSend выдает ошибку?

0

Я пытаюсь прервать вызов ajax, используя beforeSend если определенное условие истинно.

Как только я вызываю jqXHR.abort() или return false.

Я получаю следующую ошибку

TypeError: $.ajax(...).fail is not a function


.fail(function (jqXHR, textStatus, errorThrown) {

следующий код javascript

        $.ajax({
                type: "POST",
                beforeSend: function (jqXHR) {
                    if (1 === 1) {
                        jqXHR.abort();
                    }
                },
                data: { x:1},
                url: 'echo/json'
            })
                .fail(function (jqXHR, textStatus, errorThrown) {

                    console.log("error"+textStatus)
                })
                .done(function (data) {
                    console.log("ajax complete");
                    console.log(data);
                });

jsfiddle: http://jsfiddle.net/939xG/

Кто-нибудь знает, почему jqXHR.abort() в beforeSend подтверждает ошибку?

или как я могу изменить код в beforeSend, чтобы я мог прервать запрос ajax без каких-либо ошибок.

Я использую jquery 1.7.2 и не могу перейти на более высокую версию

  • 1
    Я думаю, что как только вы прервете его, $ .ajax () больше не возвращает jqXHR. возможно ошибка. Если бы вы использовали обратные вызовы error и success, а не done / fail, я подозреваю, что это остановит ошибки.
Теги:

1 ответ

1
Лучший ответ

Когда вы $.ajax в beforeSend, $.ajax вернет false а не jqXHR. Избегайте его, не прерывая в beforeSend, или не используя методы done и fail в пользу использования параметров успеха и ошибок.

http://jsfiddle.net/939xG/2/

var jqXHR = $.ajax({
    type: "POST",
    beforeSend: function (jqXHR) {
        if (1 === 1) {
            jqXHR.abort();
        }
    },
    data: {
        x: 1
    },
    url: 'echo/json',
    success: function (data) {
        console.log("ajax complete");
        console.log(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {

        console.log("error" + textStatus)
    }
});
console.log(jqXHR) // false

Это звучит как ошибка для меня, но поскольку обновление jquery не является вариантом, я не рассматривал эту возможность.

  • 0
    Вы можете попытаться найти ошибку и исправить ее в файле.
  • 0
    Я полагаю, это было исправлено в версии 1.8: bugs.jquery.com/ticket/10944
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню