如果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错误并在失败时显示适当的消息?


当前回答

如果你想使用.then(),它与.done()相比有细微的区别:

return $.post(url, payload)
.then(
    function (result, textStatus, jqXHR) {
        return result;
    },
    function (jqXHR, textStatus, errorThrown) {
        return console.error(errorThrown);
    });

其他回答

如果你想使用.then(),它与.done()相比有细微的区别:

return $.post(url, payload)
.then(
    function (result, textStatus, jqXHR) {
        return result;
    },
    function (jqXHR, textStatus, errorThrown) {
        return console.error(errorThrown);
    });

你把.onerror处理程序附加到ajax对象上,为什么当vanila跨平台工作时,人们坚持发布JQuery作为响应…

的例子:

ajax = new XMLHttpRequest();
ajax.open( "POST", "/url/to/handler.php", true );
ajax.onerror = function(){
    alert("Oops! Something went wrong...");
}
ajax.send(someWebFormToken );

jQuery 1.5添加了延迟对象,很好地处理了这个问题。只需调用$。在通话结束后张贴并附上你想要的任何处理程序。延迟对象甚至允许附加多个成功和错误处理程序。

例子:

$.post('status.ajax.php', {deviceId: id})
    .done( function(msg) { ... } )
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    });

在jQuery 1.8之前,函数done被称为success, fail被称为error。

一个简单的方法是实现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.');
  }
});

你必须记录responseText:

$.ajax({
    type: 'POST',
    url: 'status.ajax.php',
    data: {
    deviceId: id
  }
})
.done(
 function (data) {
  //your code
 }
)
.fail(function (data) {
      console.log( "Ajax failed: " + data['responseText'] );
})