2011-01-14 14 views
0

ねえ、みんな!まず第一に、私はこの種のものがかなりばかげていることを知っていますが、それが私の目標達成を視覚化する方法です。JQueryのforeach内でforeachを使用するにはどうすればいいですか?

私は配列を含むJSonオブジェクトを持っていますが、残念ながら1つのJSonオブジェクトのリストを繰り返し処理してから、その配列を繰り返す必要があります。次のようにJSONオブジェクトの外観(それはポルトガル語でですが、あなたたちはそれを理解することができます):

{ "produtos":[{ "キー": "DERIVADOS DE FERRO"、 "値":217816909}、 { "キー": "MADEIRAS、 SUAS MANUFATURAS EMOBILIÁRIOメディコ CIRÚRGICO"、 "値":117812290}、{ "キー": "Celuloseの、 PAPEL E SUAS OBRAS"、 "値":100086937}、{」 「キー」:「CARNE SUÍNA」、「値」:81738783}、{"キー": "CARNE BOVINA"、 "値":74894768}、{"キー": "CARNE DE AVES"、 "値" 65302433}、{"Key": "Outros"、 "Value":444520811}、 "ano":2005、 "tipo":1}

Produtosは私が言及した配列で、重要な2つの値、ano(年)とtipo(型)があります。私のコードを見ては、次のとおりです。

jQuery.getJSON("/webportos/Porto/GraficoComercio?id=" + iddoporto.className + "&ano=2005", null, function (items) {     
    jQuery.each(items, function (itemNo, item) { 
     jQuery.each(item.produtos, function (dicNo, dic) { 
      options.series.push({ name: dic.Key, data: dic.Value});        
      options.title.text = "Comércio - "+item.ano; 
      options.yAxis.title.text = "Exportação";         
      options.tooltip.formatter = function() { 
       return '<b><u>' + this.series.name + '</u></b><br/><b>' + this.x + '</b>: ' + this.y + ' '; 
      }   
     }); 
    }); 

    chart = new Highcharts.Chart(options);    
}); 

のコードのこの作品は、クロームが表示にJavaScriptコンソールます:

ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:32 Uncaught TypeError: Cannot read property 'length' of undefined

あなたたちは私を助けることはできますか?

答えて

2

は、このですか?

jQuery.each(items, function (itemNo, item) { 

私の理解から、jQuery.each(オブジェクト、コールバック、args)は配列に対してのみ使用されています。まず、object.lengthを呼び出します。ですから、

[ { "produtos" がない限り:[{ "キー": "DERIVADOS DE FERRO"、 "値":217816909}、{ "キー": "MADEIRAS、SUAS MANUFATURAS EMOBILIÁRIOメディコCIRÚRGICOを"、" Value ":117812290}、{" Key ":" CELULOSE、PAPEL E SUAS OBRAS "、" Value ":100086937}、{" Key ":" CARNESUÍNA "、" Value ":81738783} {Key} "、"値 ":444520811}"キー ":" CARNE BOVINA "、"値 ":74894768}、{"キー ":" CARNE DE AVES "、"値 ":65292433}、 } ]、 "ano":2005、 "tipo":1}

このエラーが発生します。

さらに、Diodeusの提案を考慮に入れることができます。 jQuery.eachは、forループを使用してデータをループするだけでなく、かなりパフォーマンスが低下します。

2

JSONデータを反復処理するためにjQueryは必要ありません。プレーンな古いJavascriptを使用してください。

は、この質問を参照してください:あなたは非アレイ上)(.eachを使用しようとしているので、Display JSON/YAML hierarchy as a tree in HTML?

function renderJSON(obj) { 
    var keys = [] 
    var retValue = "" 
    for (var key in obj) { 
      if(typeof obj[key] == 'object') { 
        retValue += "<div class='tree'>" + key           
        retValue += renderJSON(obj[key]) 
        retValue += "</div>" 
      } 
      else { 
        retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>" 
      } 

     keys.push(key) 
    } 
    return retValue 
    } 
関連する問題