簡體   English   中英

如何在jquery中處理AJAX中的錯誤

[英]How can I handle errors in AJAX in 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');
    }
});

您可以只使用通用ajax()函數:

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

您將需要使用fail()方法來完成該任務。

例:

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

如果您需要使用通用錯誤處理程序

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

jQuery的getJSON函數是對常規.ajax()方法的抽象-但它不包括錯誤回調。

基本上,您定義的函數僅在調用成功時才會調用(這就是為什么它永遠不會到達else部分的原因)。

要處理錯誤,請像下面這樣設置一個錯誤處理程序:

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

每當AJAX請求完成並出現錯誤時,都會調用該函數。

您還可以在getJSON調用結束時附加.error:

$.getJSON("example.json", function() {
    (...)
 }).error(function() { (...) });

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM