在 JavaScript 闭包中加载一次 XML 文件

Loading XML file once in javascript closure

本文关键字:一次 XML 文件 JavaScript 闭包 加载      更新时间:2023-09-26

我目前正在尝试创建一个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 的第一个实例。

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

既然你是 doint jQuery,为什么不在闭包中使用 jQuery呢?如果xmlDoc undefined,则加载它时一定有问题。尝试执行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));​