私は現在、私が持っているXMLファイルの値を使ってドロップダウンリストを作成するjavascriptクロージャを作成しようとしています。私はそれをコードの大部分のために働かせ、使用するたびにXMLファイルをロードしていました。私はコードをより効率的にしたいと思って、XMLファイルを一度ロードするだけです。私は以下のコードを使用してこれをしようとしましたが、エラーが続いています。これは、関数を呼び出すコードをあるjavascriptクロージャーで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を使用しようとする最初のインスタンスです。
問題に関するヘルプやチュートリアルは大変ありがたいです。
私はこれを実装しようとしましたが、エラー 'callback is undefined'が返されます。しかし、console.log(data)はすべてのXMLデータを返すので、うまくいくようです。 – Phil
@Phil [ここで動作するようです](http://jsfiddle.net/vC8ZQ/)。 'callback'は、' loadXMLDoc'が呼び出されたときに渡される関数です。コールバックがまったく渡されなかった場合にのみ 'undefined 'になっていました。 – Joseph
申し訳ありませんコードの一部を見逃してしまいましたが、私はいつも答えを使ってコードを変更しています。コピーして貼り付けるのではなく、どのように動作するかを知りたいからです...ありがとう – Phil