使用Ajax加载XML文件[面向对象]

时间:2014-01-19 21:37:00

标签: javascript jquery ajax xml

这是我的xml文件示例,其中<studentenhuizen>重复多次:

<studentenhuis>
  <studentenhuizen>
    <adres>Aalbeeksesteenweg</adres>
    <huisnr>19</huisnr>
    <gemeente>KORTRIJK</gemeente>
    <aantal_kamers>14</aantal_kamers>
  </studentenhuizen>
</studentenhuis>

我的对象

function StudentenKot(adres, huisnr, gemeente, aantalkamers){
    this.adres = adres;
    this.gemeente = gemeente;
    this.huisnr = huisnr;
    this.aantalSlaapkamers = aantalkamers;
};

加载xml文件:

$.ajax({
    type: "GET",
    dataType: "xml",
    url:url,
    success: function (xml) {
        studentenhuis = new Array();
        $(xml).find("studentenhuizen").each(function () {
            studentenhuis.push(new StudentenKot(this.adres, this.huisnr, this.gemeente, this.aantal_kamers));
        });

        $.each(studentenhuis, function (i) {
            $(".studentenkoten").append("<div class='gemeente'>" + studentenhuis[i].adres + "</div>");
        });
    }
});

当添加到<div class="gemeente">时,它会显示“未定义”。 这之前有用,但它现在说[Object object]

alert($(xml).find("adres")); 

1 个答案:

答案 0 :(得分:1)

  

this.adres - 我和json混淆了不是吗?

是的,你有。警告/字符串化时应该说undefined

  

$(xml).find("adres") - 它现在说[Object object]

是的,find返回的是一个jQuery集合对象,它将被字符串化为"[object Object]"。你想要:

  • 不是<adres>节点(也不是带有它的jQuery集合),而是其文本内容
  • 搜索当前的<studentenhuizen>节点,而不是整个xml

所以使用

$(xml).find("studentenhuizen").each(function () {
    studentenhuis.push(new StudentenKot(
        $(this).find("adres").text(),
        $(this).find("huisnr").text(),
        $(this).find("gemeente").text(),
        $(this).find("aantal_kamers").text()
     ));
});