1

私は次のJavaScriptコードを持っています:

function LoadWord(currentLanguage, currentId, isBadWord)
{
    var filePath, badFilePath;
    switch(currentLanguage) {
        case 'spanish':
                filePath = 'data/spanish.xml';
                badFilePath = 'data/badSpanish.xml';
            break;
        case 'catalan':
                filePath = 'data/catalan.xml';
                badFilePath = 'data/badCatalan.xml';
            break;

        default: return;
    }

    $.ajax({
        type: "GET",
        url: filePath,
        dataType: "xml",
        success: function(xml) {
            $(xml).find('word').each(function(){
                if($(this).find('id').text() == $.myNameSpace.cImgId)
                {
                    $.myNameSpace.currentWord = $(this).attr('name');
                    $.ajax({
                        type: "GET",
                        url: badFilePath,
                        dataType: "xml",
                        success: function(xml) {
                            $(xml).find('word').each(function(){
                                for(index = 0; index < 3; index++)
                                {
                                    if($(this).find('id').text() == $.myNameSpace.badWordsIds[index])
                                    {
                                        $.myNameSpace.badWords[index] = $(this).attr('name');
                                    }
                                }
                                UpdateWords();
                            });
                        },
                        error: function(x) { alert(x.responceText); }
                    });
                }
            });
        },
        error: function(x) { alert(x.responceText); }
    });
}

function UpdateWords()
{
    var languageWordPos = randomFromTo(1, 4);
    var index = 1;
    var badWordsIndex = 0;

    while (index < 5) {
        if (index == languageWordPos ) {
            SetTextToButton(index, $.myNameSpace.currentWord);
        }
        else {
            SetTextToButton(index, $.myNameSpace.badWords[badWordsIndex]);
            badWordsIndex++;
        }
        index++;
    }

    LoadUserOwnWord($.myNameSpace.lang, $.myNameSpace.cImgId);
}

function SetTextToButton(index, text)
{
    console.log("SetTextToButton");
    switch(index)
    {
        case 1:
            $('#Word1').html(text);
        break;
        case 2:
            $('#Word2').html(text);
        break;
        case 3:
            $('#Word3').html(text);
        break;
        case 4:
            $('#Word4').html(text);
        break;
        default: return;
    }
}

$.myNameSpace.badWords私はこの行で宣言します:

$.myNameSpace.badWords[index] = $(this).attr('name');

この行は、2番目のajax呼び出し成功関数内で宣言されています。

ここから値を取得しようとすると$.myNameSpace.badWords

SetTextToButton(index, $.myNameSpace.badWords[badWordsIndex]);

宣言されていない変数を取得します。この行はUpdateWords()関数内にあります。

FireBugでデバッグしていますが、変数が表示BadWordsされません。$.myNameSpace

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

ajax呼び出し内で変数を宣言しているので、その関数に対してローカルです。他の関数で使用できるように、ajax呼び出しの外で変数をインスタンス化する必要があります。

于 2011-06-01T17:46:55.023 に答える
0

正解は、初期化されていない配列を使用できないということです。

私はこれを成功関数の中で行うことができます:

$.myNameSpace.badWords = new Array(3);

そして、それは他のどの機能にも利用できるようになります。

于 2011-06-01T19:44:57.893 に答える