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 呼び出しを同期化することは、めったに良い考えではないことに注意してください (終了するまでブラウザーが完全にロックされます。また、別のシステムと通信しているときは、終了するという保証はありません)charlist非同期にする場合 (AJAX の最初の A はこれを表します)、 AJAX 呼び出しを「失敗」すると利用できないため、累積値をコールバックに渡す必要があります。

于 2012-09-19T11:16:44.690 に答える