1

介绍


我正在使用 XML 数据集构建全球会议室目录。我想把数据塞进去,this.formData这样我就可以以多种方式重用这些信息,而不必一次又一次地调用 XML。

this.formData当我通过调试器时未定义

我究竟做错了什么?


编码


var Directory = function () {
    this.formData;
};

Directory.prototype = function () {

    init = function () {
        getXMLforDropDown.call(this);
        buildDropDown.call(this);
    },
    getXMLforDropDown = function () {

        var directoryObj = this;

        $.ajax({
            url: 'formdata/crooms.xml',
            dataType: "xml",
            success: function (xmlData) {

               directoryObj.formData = xmlData;

            }
        });
    },
    buildDropDown = function () {
        if ($('#ddChooseCountry')) {
            $('#ddChooseCountry').append($('<option value=""></option>'));
            $(this.formData).find('room').each(function () {
                var strCountry = ($(this).attr('country'));
                if (strCountry !== "") {
                    $('#ddChooseCountry').append($('<option value="' + strCountry + '">' + StrCountry + '</option>'));
                }
            });
        }
    }


    return {
        init: init
    }
} ();



$(document).ready(function () {

    var directory = new Directory() ;
    directory.init();

});

4

1 回答 1

1

您正在发出异步 http 请求,因此您的buildDropDown方法被调用得太早了。您可以尝试设置一个 ajax 选项以使其成为同步请求。

$.ajax({
  async: false, // yay for sync
  url: 'formdata/crooms.xml',
  dataType: 'xml',
  success: function (xmlData) {
    directoryObj.formData = xmlData;
  }
});

或者,您可以buildDropDown在成功处理程序内部调用。

$.ajax({
  url: 'formdata/crooms.xml',
  dataType: 'xml',
  success: function(xmlData) {
    directoryObj.formData = xmlData;
    directoryObj.buildDropDown();
  }
});
于 2013-08-08T21:48:27.420 回答