2009-12-04 70 views
7

我有以下的Ajax請求:

 jQuery.ajax({ 
      async: true, 
      type: "GET", 
      url: url, 
      data: data, 
      dataType: "json", 
      success: function(results){ 
       currentData = results; 
      }, 
      error: function(xhr, ajaxOptions, thrownError){ 
       if (xhr.status == 200) { 
        console.debug("Error code 200"); 
       } 
       else { 
        currentData = {}; 
        displayAjaxError(xhr.status); 
       } 
      } 
     }); 

出於某種原因,錯誤回調被稱爲事件雖然HTTP狀態代碼是200,即。該請求是確定的。爲什麼是這樣?

回答

10

問題可能是從url返回的json數據格式錯誤。當服務器實際返回時,http狀態碼是200.但這並不意味着數據是正確的json。檢查返回的字符串化的json數據是否正確形成。

我在回答我自己的問題,因爲我很難學會這一點。在我的json數據中,我沒有逃過一個「-quote」字符,這導致了非常奇怪的行爲。幸運的是,雙引號字符幾乎是唯一需要通過JSON傳遞的數據轉義的字符。 Where can I find a list of escape characters required for my JSON ajax return type?

1

您的回撥是否會返回Content-type: application/json?如果不是,那很可能是原因。

+0

我測試過這個,看起來沒關係。 ks)有和沒有內容類型聲明的兩種方式。 – kosoant 2009-12-04 14:00:45

+0

嗯,也許這是原型庫,而不是jQuery然後 – Greg 2009-12-04 14:22:31

0

我做了很多與文件的測試:網址,而不是使用一個Web服務器的我的JSON代碼總是有錯誤的MIME類型要照顧這我使用下面的代碼:。

$(document).ready(
    function(){ 

     myData = {}; 
     $.ajax({ 
      type: "GET", 
      // url: "json.php?fn=jsonData.json",  // with Apache 
      url: "jsonData.json",      // As a file:/// URL 
      contentType: "application/json; charset=utf-8", 
      data: myData, 
      beforeSend: function(x) { 
       if(x && x.overrideMimeType) { 
        x.overrideMimeType("application/json; charset=UTF-8"); 
       } 
      }, 
      dataType: "json", 

      success: function(returnData){ 
       $("#jsonData").html("Success:"+returnData.tag); 
      }, 
      error: function(returnData) { 
       $("#jsonData").html("Error:"+returnData.tag); 
      } 
     }); 
    } 
); 

這將強制MIME類型對於JSON數據是正確的。

相關問題