2017-12-18 8 views
1

XML DBからデータを取得しています。それは大体です:jQuery AJAX .each()count items

$(this).find('state').each(function(){ 

この:

success: function(xml){ 
$('record',xml).each(function() { 
    var evname = $(this).find('eventname').text(); 
    var co = $(this).find('company').text(); 
    var city = $(this).find('city').text(); 
    var state = $(this).find('state').text(); 
    ... 

私は変数を持っていた後、私は個々の状態のため、各()を実行します。

<record> 
    <eventname></eventname> 
    <company></company> 
    <city></city> 
    <state></state> 
</record> 

私は、次でそれを解析します私は各州のためのイベントを返すことができます、そしてそれは素晴らしい仕事です。しかし、私が今年何をする必要があるのか​​は、各州の出来事の数を提供することです。さまざまな理由から、最も信頼できる項目は「都市」です。

var count = $(this).find('city').length; 
しかし、私は状態のループ内でこれとそれを解析する場合:だから私は試した

$('<div></div>').html('<p>Total: '+ count +'</p>').prependTo('.'+ state); 

私は、各都市の段落の行と「1」の結果の数を取得します:

合計:1合計:1合計:1

...

これは、AJAXが各レコードをループしており、見つかったときに単一の結果を返すためです。カウント(段落の数)は各状態で正しいです。状態に15イベントがある場合は、15の合計が1つ前に付加されます。だから私が持っている質問(と私は多くの異なる構文解析の方法を試した)、どのように私は数字を合計し、 "合計:15"のような結果を得るのですか?この

success: function (xml) { 
    var count = 0; 
    $('record', xml).each(function() { 
     ... 
     count++; 
     ... 

について

+1

あなたは 'state'ループ、および場所/それが呼び出されたときに提供することができますか? – Steve

+0

それは私のポストにあります。これは$(document).readyと$( 'record'、xml)の後に呼び出されます。 – sifujc

答えて

0

私たちはそれを解決しました!私はちょうどレコードに集中する必要があったとき、私は兄弟を見て間違った道を歩いていたことが分かります。

私の同僚は、関数を書いた:そこから

var recordsList = []; 
var statesObj = {}; 

function parser() { 
    recordsList.forEach(function(record) { 
     if(!statesObj[record.state]) { 
      // If state key doesn't exist, create it 
      // Each state will have its own key for each indexing, along with a records list 
      statesObj[record.state] = { 
       records: [record], 
       dot_on_map: false 
      } 
     } 
     else { 
      // If state key exists, Then just add to it. 
      // The records list in the state key should exist during this iteration 
      statesObj[record.state].records.push(record); 
     } 
    }) 

    //console.log("records:", recordsList); 
    //console.log("states:", statesObj); 
    render(); 
} 

function render() { 
    Object.keys(statesObj).forEach(function(key) { 
     let state = key; 
     let stateObj = statesObj[key]; ... 

を、それだけだった。​​

0

どのように私はfind('city')が常に各反復で1 countが動作するはず増加だから、1を返すことに気づきました。

+0

Nope。 count ++は合計を2に、合計を2に、合計を2に増やします。同じ数の都市に依然として置かれるので、結果は2倍にならず、印刷された数になります。 – sifujc

+0

私が正しく理解しているかどうかを見てみましょう。だからあなたは各州のイベントを数えたいと思っていますし、各州の異なる都市を数えることでそれをやっていますか?各都市は1つのイベントしか持てないためですか? – gnCupo