2010-04-23 2 views
39

Мне нужно изменить проект, написанный кем-то другим. Поскольку код беспорядок, я не могу реально изменить этот $ .post() (или заменить его на $ .ajax()). То, что мне нужно сделать, - это знать, возвращает ли сообщение что-то другое, чем JSON, и вернет его.обработка ошибок с .post()

$.post('balbal.html', json, function(data) { ... my coude ... }, 'json') 

Я могу видеть ответ на сообщение в консоли.log. Есть ли простой способ получить его?

ответ

13

Там есть несколько способов сделать это, но если вы не получаете ответ об ошибке доступный через возвращаемый объект данных JSON, вы можете использовать $.ajaxSetup() для определения значений по умолчанию для всех ajax вызывает через jQuery. Несмотря на то, что метод $.post() не указывает обработчик ошибок или обратный вызов сам по себе, метод $.ajaxSetup() будет захватывать любые ошибки ajax и выполнять функцию, которую вы определяете для него.

В качестве альтернативы, есть также функция $.ajaxError(), которая будет делать то же самое.

Обратите внимание, что это не будет работать, если ответ JSON вернется правильно, но с кодом ошибки на стороне сервера. Если вы хотите захватить эти типы дел, вам может быть лучше их искать, используя метод $.ajaxComplete()

+0

сработал с установкой функции ошибки по умолчанию с $ .ajaxSetup() ... – meo

2

Вы можете использовать $.ajax() ($.post - это ярлык, который в конечном итоге вызывает его вызов) и определить обратный вызов ошибки.

Или, если вы действительно не хотите, чтобы сделать это, вызовите

$.ajaxError(function(){ 
    //error handler 
}) 

до этого $.post

+0

нет обратного вызова ошибки на $ .post()? – meo

+0

http://api.jquery.com/jQuery.post/ В '$ .post' нет обработки ошибок, потому что это просто метод быстрого доступа для сохранения ввода. – Victor

+0

Я попробовал ajaxError, но он не успел выполнить. Я получаю ответ от сообщения, но его, php-ошибка, а не json, которую я ожидаю. – meo

97

Определите обратный вызов ошибки сразу после сообщения. Обратите внимание на размещение в полуколонии только в конце.

$.post('balbal.html', json, function(data) { 
    // ... my code ... 
}) 
.fail(function(response) { 
    alert('Error: ' + response.responseText); 
}); 

http://api.jquery.com/deferred.fail/

Для более старых версий JQuery (до 1,8) использования .error вместо с тем же синтаксисом.

+6

+1 Brilliant :) – Usman

+0

Было бы неплохо получить фактическое сообщение об ошибке, но это круто, чем xx – John

+5

@John и любой, кто придет сюда в в будущем, если вы выполните .fail (res), вы можете сделать res.responseText для доступа к сообщению об ошибке. –

Смежные вопросы