2011-05-28 47 views
1

在獲取服務器的XML文件的響應,我試圖讓XML響應JavaScript數組一樣:jQuery的AJAX:JavaScript數組

<script type="text/javascript"> 
    var arrayName = []; 
    var arrayValue []; 
$(document).ready(function() 
{ 
    $.ajax({ 
    type: "GET", 
    url: "data.xml", 
    dataType: "xml", 
    success: function(xml) { parseXml(xml); } 
}); 
}); 

function parseXml(xml) 
{ 
    $(xml).find("category").each(function() 
    { 
     arrayName.push($(this).find("name").text()); 
     arrayValue.push($(this).find("value").text()); 
    }); 
} 

//Do some javascript stuff using arrayName and arrayValue for example: 
    alert(arrayName[0]); 
    alert(arrayValue[0]); 

</script> 

但我不能夠獲取JavaScript數組中的XML響應。

我的XML文件是:

<?xml version="1.0" encoding="utf-8" ?> 
    <data> 
     <category id="category1"> 
      <name>Error</name> 
      <value>41</value> 
     </category> 
     <category id="category2"> 
      <name>Warning</name> 
      <value>23</value> 
     </category> 
     <category id="category3"> 
      <name>Info</name> 
      <value>46</value> 
     </category> 
    </data> 

請幫我解決這個問題

+0

這可能已經解決了您的問題:將alert添加到回調函數中。它們在響應來自服務器之前執行。 Ajax是**異步**。 – 2011-05-28 14:16:43

+0

嗨菲利克斯,謝謝你的回覆。由於我是jquery的新手,所以我不知道如何有效地使用回調。你能給我看一些以上的代碼片段嗎? – 2011-05-28 17:03:34

+0

請看我的答案。 – 2011-05-28 17:25:31

回答

3

我將在這裏重複我的評論:

把警報回調。它們在響應來自服務器之前執行。 Ajax是異步

所以基本上你必須調用所有必須處理來自回調的響應的代碼。

例子:

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "data.xml", 
     dataType: "xml", 
     success: function(xml) {   
      var items = parseXml(xml); 
      doStuff(items); 
     } 
    }); 
}); 

function parseXml(xml) { 
    var items = []; 
    $(xml).find("category").each(function() { 
     items.push({ 
      name: $(this).find("name").text(), 
      value: $(this).find("value").text() 
     }); 
    }); 
    return items; 
} 

function doStuff(items) { 
    //Do some javascript stuff with the response 
    alert(items[0].name); 
    alert(tiems[0].value); 
} 

回調是沒什麼特別的。由於函數是JavaScript中的第一類對象,因此可以像其他任何值一樣傳遞它們。

+0

嗨,菲利克斯其工作.......你很好.....感謝幫助 – 2011-05-28 19:12:08

+1

@nitin:請接受答案,然後點擊旁邊的勾號大綱。 – 2011-05-28 20:07:42