如何从数组中获取json

时间:2012-08-13 12:02:53

标签: jquery json

我想知道如何正确地从以下json返回数据:假装我有一个网址http://test.com/tesdata,它提供了以下数据:

[{"Identifier":1, "Name":"Test"},
 {"Identifier":2, "Name":"Test"},
 {"Identifier":3, "Name":"Test"}]

所以我做了以下操作来将这些数据放入div:

                $.ajax({ 
    type: 'GET', 
    url: 'http://notgiven', 
    data: { get_param: 'value' }, 
    dataType: 'json',
    success: function (data) { 
        alert("s");
        $.each(data, function(index, element) {
            $('.result').append("a");
        });
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert("jqXHR: " + JSON.stringify(jqXHR));
        alert("textStatus: " + JSON.stringify(textStatus));
        alert("errorThrown: " + JSON.stringify(errorThrown));
    }
});

我得到以下错误无法解析Json字符串

3 个答案:

答案 0 :(得分:1)

试试这个:

// create empty object
var json = {};

$.each(data, function(index, element) {
 // for each element, create empty object 
 json[index] = {};
 // map response data to new json object
 json[index]['id'] = element.Identifier;
 json[index]['name'] = element.Name;
});

json变量现在包含javascript格式的所有信息,方便地存储在javascript对象中:)

enter image description here

在你的例子中,这意味着:

$.ajax({ 
  type: 'GET', 
  url: 'http://test.com/tesdata', 
  data: { get_param: 'value' }, 
  dataType: 'json',
  success: function (data) { 

       var json = {};

       $.each(data, function(index, element) {
         json[index] = {};
         json[index]['id'] = element.Identifier;
         json[index]['name'] = element.Name;
         // don't know exactly what you try to do here, but let's append this data to '.result'
        $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

       });   

  }
});

请注意,如果您只想将此值附加到某个div,则无需执行整个json转换。在这种情况下,你可以做

 success: function (data) { 
               $.each(data, function(index, element) {
                $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

  }); 

}

答案 1 :(得分:0)

正如我在评论中所建议的那样,这可能是一个跨学科的问题。您无法访问来自不同来源的数据/脚本,这意味着相同的协议(http / https)相同的域(mydomain.com)相同的端口(通常省略默认为:80)

So origin of: http://localhost:8080/data != https://localhost:8080/data
   origin of: http://mydomain.org/data   != http://localhost/data
   origin of: http://mydomain.org/data   != http://localhost/data
   origin of: http://localhost/data      == http://local

host / somethingelse

仍然我不是百分百肯定。但解决问题的第一步是 正确调试

可以debug using xcode 但如果你想尝试没有。定义错误处理程序。 (check this fiddle

由于跨源问题,你会发现它无效。 (及其虚拟网址)遗憾的是,您无法捕获那些交叉原点错误。你只能在控制台中看到它们。(至少我还没有)

但现在好消息了!

PhoneGap应用程序不仅限于跨域策略!因此,如果部署,问题应该得到解决。

如果您有权访问后端,我也可以轻松解决此问题。您应该将Access-Control-Allow-Origin: *标头设置为enable CORS(跨源资源共享)

注意:对于开发而言,这不应该是一个问题,对于生产我建议设置一个固定的URL或如果不需要删除它。

修改 所以这不是一个跨领域的问题。作为错误sais:无法解析Json字符串

所以你检查jqXHR响应中的内容。查看原始数据verify if it's valid。 95%的可能性不是因为我最好的选择是jquery json-parser非常可靠。

答案 2 :(得分:-1)

您需要在使用js。

对json数据执行任何操作之前调用JSON.parse函数
$.ajax({ 
        type: 'GET', 
        url: 'http://test.com/tesdata', 
        data: { get_param: 'value' }, 
        dataType: 'json',
        success: function (data) { 
            var items = JSON.parse(data);
            $.each(items, function(index, element) {
                $('.result').append(element.Id + " " + element.Name);
            });
        }
        });

对于IE 6和7,你必须包含json2.js文件以支持JSON.parse函数。