Я хотел бы поймать ошибку и показать соответствующее сообщение, если запрос Ajax не удался.
Мой код похож на следующий, но мне не удалось поймать неудачный запрос Ajax.
function getAjaxData(id)
{
$.post("status.ajax.php", {deviceId : id}, function(data){
var tab1;
if (data.length>0) {
tab1 = data;
}
else {
tab1 = "Error in Ajax";
}
return tab1;
});
}
Я узнал, что "Ошибка в Ajax" никогда не выполняется, когда запрос Ajax не удался.
Как обработать ошибку Ajax и показать соответствующее сообщение, если оно не выполнено?
Так как jQuery 1.5 вы можете использовать механизм отложенных объектов:
$.post('some.php', {name: 'John'})
.done(function(msg){ })
.fail(function(xhr, status, error) {
// error handling
});
Другой способ: .ajax
:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("some error");
}
});
jQuery 1.5 добавил отложенные объекты, которые прекрасно справляются с этим. Просто позвоните $.post
и прикрепите к нему любые обработчики, которые вы хотите после вызова. Отложенные объекты даже позволяют вам прикреплять несколько успешных и обработчиков ошибок.
Пример:
$.post('status.ajax.php', {deviceId: id})
.done( function(msg) { ... } )
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
});
До jQuery 1.8 функция done
называлась success
, а fail
называлась error
.
$.ajax({
type: 'POST',
url: 'status.ajax.php',
data: {
deviceId: id
},
success: function(data){
// your code from above
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}
});
$.post('someUri', { },
function(data){ doSomeStuff })
.fail(function(error) { alert(error.responseJSON) });
Простым способом является реализация ajaxError:
Всякий раз, когда выполняется запрос Ajax с ошибкой, jQuery запускает Событие ajaxError. Любые обработчики которые были зарегистрированы в Метод .ajaxError() выполняется при на этот раз.
Например:
$('.log').ajaxError(function() {
$(this).text('Triggered ajaxError handler.');
});
Я бы предложил прочитать документацию ajaxError. Это больше, чем простой пример использования, продемонстрированный выше - в основном его обратный вызов принимает несколько параметров:
$('.log').ajaxError(function(e, xhr, settings, exception) {
if (settings.url == 'ajax/missing.html') {
$(this).text('Triggered ajaxError handler.');
}
});
Я исправил эту проблему, объявив datatype: 'json'
в моем jQuery ajax-вызове.
$.ajax
более читабельным, используя хеш для вашихdata
. Например:{ name : 'John', location: 'Boston' }