开发者问题收集

无法迭代 json 对象

2011-10-24
322

我正在使用以下代码构建一个 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 对象?我似乎无法获取数据的任何值,它们都显示为未定义。

3个回答

所以...您有两个 JSON 对象。您需要将它们括在括号中,以便它们位于数组中。然后您可以说 json[0].group:

[{'group': 'test', 'assets': {}}, {'group': 'test2', 'assets': {}}]
frosty
2011-10-24

groupassets 是一个对象,而不是字符串。您必须在调用 json.push 之前将其字符串化。>

Darcy
2011-10-24

您应该获取从 Web 服务返回的 response.d 并将其绑定到模板。您似乎在其中进行了很多不必要的转换。

jbabey
2011-10-24