web-dev-qa-db-ja.com

Ajaxのクエリ投稿エラーをキャッチするにはどうすればよいですか?

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リクエストが失敗したときに「Error in Ajax」が実行されることは決してないことを知りました。

Ajaxエラーを処理して失敗した場合に適切なメッセージを表示するにはどうすればよいですか?

195
TTCG

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");
  }
});
267
choise

jQuery 1.5はこれをうまく処理する遅延オブジェクトを追加しました。単に$.postを呼び出して、呼び出しの後に好きなハンドラを添付してください。遅延オブジェクトを使用すると、複数の成功およびエラーハンドラを添付することもできます。

例:

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

JQuery 1.8より前では、関数donesuccessfailerrorと呼ばれていました。

274
Michael Venable
$.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);
  }
});
88
jAndy
$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });
14
marknery

簡単な方法は 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.');
  }
});
13
karim79