0

我想知道如何正确地从以下 json 返回数据:假装我有一个 url 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 字符串

4

3 回答 3

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变量现在包含所有json 格式的信息,方便地存储在 javascript 对象中:)

在此处输入图像描述

在您的示例中,这意味着:

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

  }); 

}

于 2012-08-13T14:43:16.343 回答
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

主机/其他东西

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

可以使用 xcode 进行调试, 但如果您想尝试不使用。定义一个错误处理程序。(检查这个小提琴

您会看到由于跨域问题而无法正常工作。(及其虚拟网址)遗憾的是,您无法捕获那些跨源错误。您只能在控制台中看到它们..(至少我还不能)

但现在好消息!

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

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

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

编辑: 所以这不是跨源问题。正如错误所说:无法解析Json字符串

因此,您检查 jqXHR 响应中的内容。查看原始数据验证它是否有效。95% 的可能性不是因为我最好的选择是 jquery json-parser 非常可靠。

于 2012-08-13T15:23:07.787 回答
-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 函数。

于 2012-08-13T12:34:41.013 回答