0

xml ファイルのデータを連想配列に格納しようとしています。配列の作成は正常に機能しますが、他の関数 (checkArray() など) のデータにアクセスできません。

var picSetsData = (function () {
    var _picSets = [];

    $.ajax({
        type: "GET",
        url: "xml/content.xml",
        dataType: "xml",
        success: function (xml) {

            $(xml).find('set').each(function (i) {
                _picSets[i] = [];
                _picSets[i].fehler = [];
                _picSets[i].url = $(this).find('src').text();

                $(this).find('spot').each(function (e) {
                    _picSets[i].fehler[e] = [];
                    _picSets[i].fehler[e].x = $(this).find("x").text();
                    _picSets[i].fehler[e].y = $(this).find("y").text();
                });
            });
        }
    });

    return {
        getPicSets: function () {
            if (_picSets) return _picSets;
            else {
                console.log('error');
            }
        }
    };
})();

checkArray();

function checkArray() {
    console.log(picSetsData.getPicSets().length); // 1
    console.log(picSetsData.getPicSets()); // my Array Data
    console.log(picSetsData.getPicSets()[1]); //undefinded
    console.log(picSetsData.getPicSets()[1].url); //undefinded
}

これを解決するためのアイデアはありますか?どうも。

4

3 に答える 3

0

function 内でローカル変数_picSetsとして宣言しました。関数間で共有できるグローバル変数にしたい場合は、関数の外で宣言する必要があります。picSetsData

于 2012-04-04T13:27:08.433 に答える
0

The $.ajax() call is asynchronous, so the surrounding function will return long before the data for the array is sent by the server.

You can do your "checkArray()" work inside the "success" callback.

于 2012-04-04T13:32:23.650 に答える
0

そこには連想配列はなく、通常の配列だけです。

配列のインデックスは 0 から始まるため、配列に項目が 1 つある場合、インデックスは 0 になります。

console.log(picSetsData.getPicSets()[0]);
于 2012-04-04T13:33:02.887 に答える