我正在使用以下代码构建一个json对象:
$.ajax({
type: "POST",
url: "/_layouts/WP/Handler.aspx/GetProductAssets",
data: '{ "productId": "'+productcode+'" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var order = "";
var data = response.d;
var Groups = [];
var json = [];
$.each(data, function(key, value){
if($.inArray(value.AssetType, Groups) == -1){
Groups.push(value.AssetType);
}
});
$.each(Groups, function(key, value){
var groupassets = [];
$.each(data, function(key2, value2){
if(value2.AssetType == value)
groupassets.push(value2);
});
json.push("{'group': '" + value + "', 'assets': " + groupassets + "}");
});
alert(json);
$.get('/common/js/assettemplate.htm', function (template) {
$('body').append(template);
$("#assetTemplate").tmpl(json).appendTo("#support-download-results");
});
},
});
在代码中创建并警告的json对象产生以下内容:
{'group': 'test', 'assets': [object Object]}, {'group': 'test2', 'assets': [object Object]}
当我尝试使用json[0].group
进行访问时,我得到undefined
。我没有正确访问或构建此json对象吗?我似乎无法得到任何数据的值,它们都是未定义的。
答案 0 :(得分:1)
所以...你拥有的是两个JSON objs。您需要将它们包装在括号中,以便它们位于数组中。然后你可以说json [0] .group:
[{'group': 'test', 'assets': {}}, {'group': 'test2', 'assets': {}}]
答案 1 :(得分:0)
groupassets
是一个不是字符串的对象。在调用json.push
答案 2 :(得分:0)
您应该从Web服务返回的response.d并将其绑定到模板。你似乎在做了很多不必要的转换。
答案 3 :(得分:0)
您正在创建一个字符串数组。您无法访问json[0].group
,因为jons[0]
是字符串,字符串没有group
属性。
只需将对象添加到数组中:
json.push({group: value, assets: groupassets})
正如我在评论中已经说过的,你可能不想要JSON,你创建的实际上并不是JSON。