2011-10-24 42 views
0

我建立与下面的代码一个JSON对象:无法通过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

我想你根本不想创建JSON ....我想你应该创建一个JavaScript对象。 –

+0

您似乎在循环浏览JSON对象以创建另一个JSON对象 - 请问为什么? – Blazemonger

+0

如果你的json变量是一个包含两个对象的数组,当你alert()时,你会看到“[object Object],[object Object]”,就是这样。 – Crontab

回答

1

之前,您必须将它串联起来...所以...您拥有两个JSON对象。您需要将它们包装在括号中,以便它们位于数组中。然后,你可以说JSON [0]。集团:

[{'group': 'test', 'assets': {}}, {'group': 'test2', 'assets': {}}] 
0

groupassets是一个对象而不是字符串。在调用json.push

0

你应该采取的response.d从Web服务返回并绑定该到模板。你似乎在进行大量不必要的转换。

0

您正在创建一个字符串数组。您无法访问json[0].group,因为jons[0]是一个字符串,字符串没有group属性。

对象只需添加到阵列中:

json.push({group: value, assets: groupassets}) 

正如我已经说过我的评论,你可能不希望JSON和你所创造的其实不是JSON。