ajax json:如何从ajax接收的json对象中检索数据?

问题描述:

下面是代码:ajax json:如何从ajax接收的json对象中检索数据?

$.ajax({ 
    url: MyURL, 
    method: 'GET', 
    processData: true, 
    contentType: 'application/json;', 
    dataType: "json", 
    success: function(data) { 
    alert("Success data= "+JSON.stringify(data)); 
    var count = Object.keys(data).length; 
    alert("count = "+count); 
    result=data[0]; 
    alert("result.CountryName:"+ result.CountryName); 
    alert("total " + keys.length + " keys: " + keys); 
    error: function(data) { alert("ajax Error"); }, 
}); 

首届警报似乎确定,并给出: 成功数据= “[{\” 国家或地区名称\ “:\” 法国\ “\ ”货币\“:\” 欧元\“PriceMax \”:500.00,\“PriceStep \”:50.00,\“PriceMin \”:100.00}]“

从firebug/network/response我看到相同的数据(带反斜杠! !)

第二次警报给出107.显然每个字符都是一个对象? 但是当我检查http://jsonlint.com/的语法时,json是正确的。

最后最后的警报给出:未定义。

那又怎么了?

感谢您的帮助

您要发送的数据是包含单个对象的数组。您需要使用data[0]['CountryName']

+0

遗憾的是它并没有改变结果的警报( “数据[国家或地区名称]:” +数据[0] [ '国家或地区名称']); - > undefined alert(“data.CountryName:”+ data [0] .CountryName); - > undefined 谢谢Daniel Daniel – alvaro562003

+0

好像数据不会被解释为JSON;你需要先用'JSON.parse(data)'手动解析它。 –

您拥有的响应不是JSON对象,它是一个String。所以你需要解析它到一个JSON,然后把数组的第一个位置。

json_data = JSON.parse(data) 
result = json_data[0] 

然后使用该对象的属性:

result.CountryName 
+0

嗨,感谢Rubico。我更正了代码,但它不会改变结果。我想知道为什么我有count = 107? – alvaro562003

+0

我几乎可以确定你是以String而不是Json的形式获取数据的。现在我确定这是一个字符串,我做了一个测试,字符串长度恰好为107。 – Rubico

+0

您是否尝试过'console.log(data)',因为Daniel在下面的评论中说过,也许您应该使用'JSON.parse(data)'将字符串解析为JSON之前 – Rubico

的问题是在JSON字符串的斜线。

我读Why does JSON returned from the django rest framework have forward slashes in the response?并在我的django代码中做一些修改。

我改变了返回JsonResponse(simplejson.dumps(data),safe = False) 返回JsonResponse(data,safe = False)并且斜杠消失,然后javascript代码工作。

感谢您的帮助丹尼尔和Rubico