2012-09-19 12 views
0

這是我從xml解析出來的,但它太長了。有誰知道如何縮短它? 「charList()」的數字和「if」的結構有所改變。縮短jquery中的源代碼解析xml

var charList1; var charList2; var charList3; var charList4; var charList5;

$.ajax({ 
    type: "get", 
    url: "XMLFile1.xml", 
    async: false, 
    dataType: "xml", 
    success: function (xml) { 
     $(xml).find('list').each(function() { 

      obj = $(this).find("title"); 

      if (obj.text() == "1") { 
       charList1 = (obj.next().text()); 
      } else if (obj.text() == "2") { 
       charList2 = (obj.next().text()); 
      } else if (obj.text() == "3") { 
       charList2 = (obj.next().text()); 
      } else if (obj.text() == "4") { 
       charList2 = (obj.next().text()); 
      } else if (obj.text() == "5") { 
       charList2 = (obj.next().text());     
      } 
     }); 
    } 
}); 
+0

也許使用'switch'。不會更短,但會更有效率。 –

回答

0

看起來你需要重新考慮你的數據結構(使用他們的名字數字後綴並行標量或數組變量是一個幾乎可以肯定的跡象,你真的應該使用聚合結構像數組或對象)。不速之客,它聽起來像你真的想要一個由(數值)值obj.text()索引的數組;像

var charList=[]; 
$(xml).find('list').each(function() { 
    obj = $(this).find("title"); 
    if (obj>= "1" && obj <= "5") { // use your own sanity check 
    charlist[parseInt(obj, 10)] = obj.next().text(); 
    } 
} 

但是請注意,這使得AJAX調用同步很少是一個好主意(它將徹底鎖定了瀏覽器,直到它完成,當你談論到另一個系統,你都難保它完成)。如果你使它異步(這是AJAX中的第一個A代表),你需要將累計值charlist傳遞給回調函數,因爲當你「通過」你的AJAX調用時它將不可用。

+0

謝謝你的回答。我剛開始學習Jquery。很難理解你給我的建議。我怎樣才能改變這個數組?我必須使用「charList(這裏必須有數字)」,因爲其他結構使用「charList」。因此,我必須從JQuery中聲明charList – Albright