0

这是我从xml解析出来的,但是太长了。有谁知道如何使它更短?“charList()”的数字和“if”的结构发生了变化。

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());                
            }
        });
    }
});
4

1 回答 1

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 调用时它将不可用。

于 2012-09-19T11:16:44.690 回答