0

我目前正在尝试创建一个 javascript 闭包,它将使用我拥有的 XML 文件中的值创建一个下拉列表。我已经让它适用于大部分代码,并且每次我不得不使用它时都在加载 XML 文件。我想让代码更高效,并且只加载一次 XML 文件。我尝试使用下面的代码执行此操作,但不断收到错误消息。

这是我的关闭代码...

var closure = function() {

    var xmlDoc;

    return{

            setXML: function()
            {
                xmlDoc = this.loadXMLDoc("feed.xml");
            },


            loadXMLDoc: function(dname)
            {
                if (window.XMLHttpRequest)
                {
                    xhttp=new XMLHttpRequest();
                }
                else
                {
                    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }

                xhttp.open("GET",dname, false);
                xhttp.send();
                return xhttp.responseXML;
            },


            createField: function() 
            {
                x = xmlDoc.getElementsByTagName("name");
                //code to create the drop down box
            },

            findValue: function() 
            {
                y = xmlDoc.getElementsByTagName("value");
                //code to find value
            }

   };

}();

这是调用函数的代码...

$(document).ready(function () {
    closure.setXML();
});

我得到的错误是'无法调用未定义的方法'getElementsByTagName',它可以在createField函数中找到。这是我第一次尝试使用 xmlDoc。

非常感谢有关该问题的任何帮助或教程。

4

1 回答 1

1

既然你是 doint jQuery,为什么不在你的闭包中也使用 jQuery?如果xmlDocundefined,则加载它一定有问题。尝试console.log执行 AJAX 后是否返回任何数据。

var closure = (function($) {

    var xmlDoc;

    return {
        setXML: function() {
            this.loadXMLDoc("feed.xml", function(data) {
                xmlDoc = data;
            });
        },
        loadXMLDoc: function(dname, callback) {
            $.get(dname, function(data) {

                //a possible point of failure
                //do console.log(data) to see if anything was returned

                callback(data);
            }, 'xml');
        },
        createField: function() {
            x = $("name",xmlDoc);
            //code to create the drop down box
        },
        findValue: function() {
            y = $("value",xmlDoc);
            //code to find value
        }
    };
}(jQuery));​
于 2012-04-27T08:59:27.257 回答