【问题标题】:ajax json : how to retrieve data from json object received by ajax?ajax json:如何从 ajax 接收的 json 对象中检索数据?
【发布时间】:2016-10-15 04:14:13
【问题描述】:

代码如下:

$.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");   },
});

第一个警报似乎没问题,并给出: 成功数据= "[{\"CountryName\": \"france\", \"Currency\": \"Euro\", \"PriceMax\": 500.00, \"PriceStep\": 50.00, \"PriceMin\ ": 100.00}]"

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

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

最后一个警报给出:未定义。

那么有什么问题呢?

感谢您的帮助

【问题讨论】:

    标签: json ajax django


    【解决方案1】:

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

    【讨论】:

    • 不幸的是它不会改变结果 alert("data[CountryName]:"+data[0]['CountryName']); --> undefined alert("data.CountryName:"+ data[0].CountryName);--> undefined 谢谢大牛
    • 似乎数据没有被解释为 JSON;您需要先使用JSON.parse(data) 手动解析它。
    【解决方案2】:

    您的响应不是 JSON 对象,而是字符串。所以需要先解析成JSON,然后取数组的第一个位置。

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

    然后你使用该对象的属性:

    result.CountryName
    

    【讨论】:

    • 嗨,谢谢鲁比科。我更正了代码,但它不会改变结果。我想知道为什么我有 count = 107 ?
    • 我几乎可以肯定您将数据作为字符串而不是 Json 获取。现在我确定这是一个字符串,我做了一个测试,字符串的长度正好是 107。
    • 您是否尝试过console.log(data),正如丹尼尔在下面的评论中所说,也许您应该使用JSON.parse(data) 将您的字符串解析为 JSON 之前
    • 嗨 Rubico,我设置了 dataType:“json”,所以 ajax 请求使用 json 对象回答。我的问题出在我的 django 代码的早期。谢谢卢比科
    • alvaro,你能做一个测试吗?试试console.log(data),看看是带对象的数组还是字符串。
    【解决方案3】:

    问题在于 json 字符串中的斜线。

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

    我更改了 return JsonResponse(simplejson.dumps(data), safe=False) 返回 JsonResponse(data, safe=False) 并且斜线消失然后javascript代码起作用。

    感谢丹尼尔和卢比科的帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多