2012-11-29 88 views
2

如何处理AJAX中的错误?如何处理jQuery中的AJAX错误

在我的代码中,即使未加载departments.json文件,也不执行包含console.log的else条件。我通过删除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'); 
    } 
}); 

回答

1

您将需要使用fail()方法,以实现这一目标。

例子:

$.get("test.php") 
    .done(function(){ alert("$.get succeeded"); }) 
    .fail(function(){ alert("$.get failed!"); }); 
4

你可以只使用通用ajax()功能:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: successCallback, 
    error: errorCallback 
}); 
+1

['jQuery.getJSON'(http://api.jquery.com/jQuery.getJSON/)其实上面的代码减去'错误的短手'部分。 –

+2

@SalmanA和'error'部分是必需的。删除文件将导致一个'404',这将意味着调用'error'函数。在OP的当前代码中,他没有'error'处理程序。:没有任何反应。 –

+0

我不记得说错误部分是*不*必需的。 –

1

,如果你需要一个通用的错误处理程序使用

$.ajaxSetup({ 
      error: function(xhr, status, error) { 
      // your handling code goes here 
      } 
      }); 
1

JQuery的的getJSON功能是一种抽象超过常规.ajax() m ethod - 但它排除了错误回调。

基本上,您定义的函数只有在调用成功时才会调用(这就是为什么它永远不会到达else部分)。

处理错误,之前设置一个错误处理程序是这样的:

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

每当一个Ajax请求出错完成,该函数将被调用。

你也可以在你的的getJSON通话结束追加.error:

$.getJSON("example.json", function() { 
    (...) 
}).error(function() { (...) }); 
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'); 
    } 
});​