2009-12-04 73 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数据是正确的。

相关问题