2

AJAXでエラーを処理するにはどうすればよいですか?

私のコードでは、ファイルがロードされていない場合でも、else条件を含むconsole.logは実行されません。コードにロードされているファイルをdepartments.json削除して確認しました。departments.json

私のコードは次のとおりです。

$.getJSON("departments.json?" + new Date().getTime(), {}, function(departments, status, xhr) {
    if (xhr.status == 200) {   
        var numericDepts = [];
        var nonNumericDepts = [];

        for(dept in departments) {   
            $("#kss-spinner").css({'display':'none'});
            if (isNaN(departments[dept].depNo)) {
                if (isNaN(parseInt(departments[dept].depNo,10)))
                    nonNumericDepts[nonNumericDepts.length] = departments[dept];
                else
                    numericDepts[numericDepts.length] = departments[dept];
            }
            else
                numericDepts[numericDepts.length] = departments[dept];
        }

        numericDepts.sort(cmp_dept);
        nonNumericDepts.sort(function(dept1,dept2) {
            return dept1.depNo.toLowerCase() - dept2.depNo.toLowerCase();
        });
        departments.sort(cmp_dept);
        var k = 0;

        $.each(numericDepts.concat(nonNumericDepts), function() {
            if (k % 2 == 0) {
                $('<p class="odd" onClick="selectTag(this,\'' + this.id + '\', 1)">' + this.depNo + '</p>').appendTo($(".scroller", $("#br1")));
            }
            else {
                $('<p class="even" onClick="selectTag(this,\'' + this.id + '\', 1)">' + this.depNo + '</p>').appendTo($(".scroller", $("#br1")));
            }
            k++;
        });
        $("#kss-spinner").css({'display':'none'});
    }
    else {  
        console.log(xhr.status);
        console.log(xhr.response);
        console.log(xhr.responseText)
        console.log(xhr.statusText);
        console.log('json not loaded');
    }
});
4

5 に答える 5

4

ジェネリックajax()関数を使用できます。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: successCallback,
  error: errorCallback
});
于 2012-11-29T12:50:12.703 に答える
1

これを実現するには、 fail()メソッドを使用する必要があります。

例:

$.get("test.php")
  .done(function(){ alert("$.get succeeded"); })
  .fail(function(){ alert("$.get failed!"); });
于 2012-11-29T12:47:16.783 に答える
1

一般的なエラーハンドラが必要な場合は、

  $.ajaxSetup({ 
            error: function(xhr, status, error) {
            // your handling code goes here
            }
            });
于 2012-11-29T12:50:41.507 に答える
1

JQueryのgetJSON関数は、通常の.ajax()メソッドを抽象化したものですが、エラーコールバックは除外されています。

基本的に、定義した関数は、呼び出しが成功した場合にのみ呼び出されます(そのため、else部分には到達しません)。

エラーを処理するには、次のように前にエラーハンドラを設定します。

$.ajaxError(function(event, jqXHR, ajaxSettings, thrownError) { alert("error");});

AJAXリクエストがエラーで完了するたびに、関数が呼び出されます。

getJSON呼び出しの最後に.errorを追加することもできます。

$.getJSON("example.json", function() {
    (...)
 }).error(function() { (...) });
于 2012-11-29T12:51:03.390 に答える
0

この$.getJSON()関数は、より一般的な関数の特別な目的のバージョンにすぎません.ajax()

.ajax()関数は、必要な追加機能 (エラー関数など) を提供します。ここで詳細なドキュメントを読むことができますhttp://api.jquery.com/jQuery.ajax/

$.ajax({
  url: "departments.json?" + new Date().getTime(),
  dataType: 'json',
  success: function(departments){
      var numericDepts = [];
      var nonNumericDepts = [];
      for(dept in departments)
      {   
        $("#kss-spinner").css({'display':'none'});
        if(isNaN(departments[dept].depNo))
        {
          if(isNaN(parseInt(departments[dept].depNo,10)))
            nonNumericDepts[nonNumericDepts.length]=departments[dept];
          else
            numericDepts[numericDepts.length]=departments[dept];
        }
        else
          numericDepts[numericDepts.length]=departments[dept];
      }
      numericDepts.sort(cmp_dept);
      nonNumericDepts.sort(function(dept1,dept2) {
        return dept1.depNo.toLowerCase() - dept2.depNo.toLowerCase();
      });
      departments.sort(cmp_dept);
      var k=0;
      $.each(numericDepts.concat(nonNumericDepts),function(){
        if(k%2==0){
          $('<p class="odd" onClick="selectTag(this,\''+this.id+'\',1)">'+this.depNo+'</p>').appendTo($(".scroller",$("#br1")));
        } else {
          $('<p class="even" onClick="selectTag(this,\''+this.id+'\',1)">'+this.depNo+'</p>').appendTo($(".scroller",$("#br1")));
        }
        k++;
      });
      $("#kss-spinner").css({'display':'none'});
  },
  error: function(xhr, textStatus, errorThrown) {  
    console.log(xhr.status);
    console.log(xhr.response);
    console.log(xhr.responseText)
    console.log(xhr.statusText);
    console.log('json not loaded');
  }
});​
于 2012-11-29T12:57:41.493 に答える