0

私は現在、私が持っているXMLファイルの値を使用してドロップダウンリストを作成するjavascriptクロージャを作成しようとしています。ほとんどのコードで機能し、使用するたびにXMLファイルをロードしていました。ただし、コードをより効率的にし、XMLファイルを1回だけロードしたいと思います。以下のコードを使用してこれを実行しようとしましたが、エラーが発生し続けます。

これは私がクロージャーのために持っているコードです...

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();
});

私が得ているエラーは、createField関数にある「未定義のメソッド「getElementsByTagName」を呼び出せません」です。これは、xmlDocを使用しようとした私の最初のインスタンスです。

この問題に関するヘルプやチュートリアルは大歓迎です。

4

1 に答える 1

1

あなたはdointjQueryなので、クロージャーでもjQueryを使用してみませんか?だった場合xmlDocundefined、読み込みに問題があるはずです。console.logAJAXを実行した後にデータが返されるかどうかを確認するために、を実行してみてください。

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 に答える