[Jquery] 如何捕獲Ajax查詢帖子錯誤?


Answers

由於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");
  }
});
Question

如果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錯誤並在失敗時顯示相應的消息?




$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });



我通過在我的jQuery ajax調用中聲明datatype: 'json'來解決這個問題。




一個簡單的方法是實現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.');
  }
});



$.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);
  }
});



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的功能被稱為successfail被稱為error