2011-10-24 85 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。