我目前正在尝试创建一个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的第一个例子。
非常感谢有关此问题的任何帮助或教程。
答案 0 :(得分:1)
既然你是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));