Firefox не показывает ошибки JavaScript в «потоках» AJAX? - PullRequest
0 голосов
/ 14 июня 2011

У меня есть функция test_fn, которая вызывается двумя способами:

(a) Из атрибута onclick кнопки; или (b) из функции success вызова jQuery AJAX, например:

$.ajax({
    type:  'POST',
    ...
    success: function(data) {
        test_fn();
    }
});

Я заметил, что моя консоль ошибок Firefox (3.6.17 в Linux), похоже, не показывает любых ошибок JavaScript, которые возникают в коде, вызываемом функцией успеха AJAX. Принимая во внимание, что он показывает ошибки, как обычно, в коде, который выполняется действием GUI.

Например, если у меня есть моя тестовая функция test_fn, определенная следующим образом:

function test_fn() {
    blah
}

Я увижу очевидную ошибку JavaScript, сообщаемую на консоли ошибок, когда test_fn вызывается нажатием кнопки, но НЕ, когда мой код выполняет (успешный) вызов AJAX и вызывает test_fn таким образом. 1019 *

Я просматривал сеть и не видел ничего похожего на «потоки AJAX», не записывающие их ошибки javascript »или что-то подобное. Большая часть моего javascript выполняется в обратном вызове AJAX ... Мне интересно, было ли это поведение каким-то образом подкрадывалось. Я немного потрясен этим; когда мой Javascript молча терпит неудачу, трудно отследить где без сообщения об ошибке или номера строки.

Может ли кто-нибудь предложить какую-либо помощь или совет? Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Вы пробовали:

$.ajax({
    type:  'POST',
    ...
    success: function(data) {
        test_fn();
    },
    error: function(jqXHR, textStatus, errorThrown){
       // Aw Snap... Check textStatus maybe?
    }
});
0 голосов
/ 14 июня 2011

Вы можете обернуть все это в оператор try...catch и записать его, если есть исключение. Это может быть немного утомительно, поэтому вы можете захотеть создать функцию, которая возвращает функцию, которая оборачивает функцию для вас:

function wrap(func) {
    return function wrapped() {
        try {
            func.apply(this, arguments);
        }catch(ex) {
            if(console&&console.error) {
                console.error(ex);
            }else{
                alert(ex);
            }
        }
    };
}

Используйте это так:

$.ajax({
    ...
    success: wrap(function(data) {
        // Test it by generating an error by calling a number.
        (1)();
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...