Jquery 如何捕捉Ajax查询post错误?

Jquery 如何捕捉Ajax查询post错误?,jquery,ajax,post,error-handling,Jquery,Ajax,Post,Error Handling,如果Ajax请求失败,我希望捕获错误并显示相应的消息 我的代码如下所示,但我无法捕获失败的Ajax请求 function getAjaxData(id) { $.post("status.ajax.php", {deviceId : id}, function(data){ var tab1; if (data.length>0) { tab1 = data; } else {

如果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");
  }
});

一个简单的方法是实现:

每当Ajax请求完成时 如果出现错误,jQuery将触发 ajaxError事件。任何和所有处理程序 已在 .ajaxError()方法在 这一次

例如:

$('.log').ajaxError(function() {
  $(this).text('Triggered ajaxError handler.');
});
我建议阅读文档。它所做的不仅仅是上面演示的简单用例,它的回调主要接受一些参数:

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

jQuery1.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
,您必须记录响应文本:

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

您将.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 );

如果您想利用。那么()


+1-我想补充一点,这个处理程序有几个参数,因此您可以显示实际的错误、响应代码、url等。请注意,从jQuery 1.8开始,.ajaxError()方法只能附加到文档。@Yuck$.post可以使用延迟对象接受错误回调。以下面我的答案为例。另外,我想让
$更具可读性。ajax
更具可读性的方法是对
数据使用哈希。例如:
{name:'John',location:'Boston'}
从jQuery 1.8@michaelvenble开始,上面的成功和错误回调已经过时了,我认为您可以使用
$.post().error()
+1非常好,但仍然不太喜欢语法。希望它在未来的版本中得到统一。这应该是公认的答案。目前公认的答案是“使用不同的方法”;这个答案是“这是如何让你的方法工作”。后者通常更受欢迎。实际上,这应该包含在$.post文档中,顺便说一下,对于文档,还有
responseJSON
属性,在ajax类型为
json
的情况下,该属性也非常方便。在这里添加更多的解释将有助于未来的读者。
ajax = new XMLHttpRequest();
ajax.open( "POST", "/url/to/handler.php", true );
ajax.onerror = function(){
    alert("Oops! Something went wrong...");
}
ajax.send(someWebFormToken );
return $.post(url, payload)
.then(
    function (result, textStatus, jqXHR) {
        return result;
    },
    function (jqXHR, textStatus, errorThrown) {
        return console.error(errorThrown);
    });