2014-01-21 87 views
0

我想解析一些在線存儲的XML,然後通過PHP保存每個父節點及其子節點。jQuery/AJAX多維數組

作爲一項測試,我創建了一些基本的XML,因爲在線的XML非常長。
我有一點XML,我試圖實現與基礎。

<result> 
    <name>Person1</name> 
    <date>2002-05-16</date>   
</result> 
<result> 
    <name>Person2</name> 
    <date>2012-11-06</date> 
</result> 

我想在下面的HTML單獨顯示每個結果:

<body> 
    <p>XML Split</p> 
    <div id="contents"></div> 
     <div id="scroll"><input type="button" id="next" Value=" next in array "/> 
     <input type="button" id="previous" Value=" previous in array "/></div> 
     <div id="save"><input type="button" id="one" Value=" Save xml "/> 
     <input type="button" id="all" Value=" Save all xml "/></div> 
    <p>XML Split ended</p> 
</body> 

要做到這一點,我用下面的jQuery:

$(document).ready(function() { 

$.ajax({ 
    type: "GET", 
    url: "sampleContent.xml", 
    dataType: "xml", 
    data: ({'name': name, 'date': date}), 
    success: function(xml) { 
     parseXml(xml); 
     append(); 
    } 
}); 
}); 

var tmpName; 
var tmpDate; 
var results = []; 

function parseXml(xml) { 

$(xml).find('result').each(function() { 

    tmpName = $(this).find('name').text(); 
    tmpDate = $(this).find('date').text(); 
    output = $(this).val(); 
    if (output != ''){ 
     obj = {}; 
     obj.name = name; 
     obj.date = date; 
     obj.output = output; 
     results.push(obj); 
    } 
}); 
} 

function append() { 

$(results).each(function() { 

    $('#contents').append('<div id="record"><div class="name">' + 
      tmpName + '</div><div class="date">' + 
      tmpDate + '</div></div>'); 
}); 
} 

我在努力獲取XML數據顯示,當我嘗試創建一個數組。我還需要修改數組中使用的一些變量,例如從年 - 月 - 日 - 月 - 年 - 年的日期。

我不確定如何或爲什麼這會出錯,所以將不勝感激關於創建所需的數組的任何建議。我一直試圖以how to create multidimensional array/object in jquery and pass via AJAX post爲例,但我仍然錯了。

歡迎任何和所有建議。

感謝

+0

在'追加()'函數,而不是使用使用'tmpName'和'爲曲tmpDate' – techfoobar

回答

0

在你append()功能,使用而不是使用tmpNametmpDate從數組中的值

$(results).each(function(i) { 
    $('#contents').append('<div id="record"><div class="name">' + 
      results[i].name + '</div><div class="date">' + 
      results[i].date + '</div></div>'); 
}); 
+0

感謝您的數組中的值ick答案,我修改了你的建議顯示,但仍然沒有得到任何輸出。 – PartTimeNinja

0

有幾件事情

  1. 它好像result是一個牛逼根級別,find()只發現 後裔
  2. 全局變量在循環改變,和平等 的最後一個值迴路
  3. if (output != ''){...永遠不會爲真後,作爲result元素沒有價值

-

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "sampleContent.xml", 
     dataType: "xml", 
     data: { 
      name : name, 
      date : date 
     } 
    }).done(function(xml) { 
     $('<div />').append(xml).find('result').each(function() { 
      var record = $('<div />', { 
        id : 'record' 
       }), 
       name = $('<div />', { 
        'class' : 'name', 
        html : $(this).find('name').text() 
       }), 
       date = $('<div />', { 
        'class' : 'date', 
        html : $(this).find('date').text() 
       }); 

      $('#contents').append(record.append(name, date)); 
     }); 
    }); 
}); 
+0

感謝您的回答,但現在可能有點困惑,這是否應該完全重寫我所做的事情?我曾嘗試將其全部複製,並嘗試將parseXml()替換爲.done的新函數並添加()函數。我仍然沒有得到任何輸出。至於'if(output!=''){...永遠不會是真的,因爲結果元素沒有值',我試圖將名稱和日期對象刷入數組以獲得結果是錯誤的嗎?因此創建一個叫做結果的obj數組? – PartTimeNinja

+0

@PartTimeNinja - 'val()'獲得值,如在'中,''沒有值,所以'val()'將總是返回一個空字符串。你在創建一個數組時沒有錯,但是你正在迭代創建一個數組,然後你重複使用這個數組,那麼當你馬上使用這個值時,這個數組並不是真的需要。你已經將dataType設置爲'xml',所以你不需要'$ .parseXML',jQuery爲你做了,'done'和'success'確實是一樣的,所以這應該有希望代替你有。在'done'的第一行嘗試控制檯日誌記錄'xml'? – adeneo