Переменная пространства имен jQuery - PullRequest
1 голос
/ 01 июня 2011

У меня есть следующий код 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');

Эта строка объявлена ​​во второй функции успешного вызова ajax.

Когда я пытаюсь получить значение из $.myNameSpace.badWords здесь:

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

Я получаю необъявленную переменную. Эта строка находится внутри UpdateWords() функции.

Я отлаживаю с помощью FireBug и не вижу BadWords в переменной $.myNameSpace.

Как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

вы объявляете переменную внутри вызова ajax, чтобы она была локальной для этой функции, вам просто нужно создать экземпляр переменной вне вызова ajax, чтобы она была доступна для другой функции.

0 голосов
/ 01 июня 2011

Правильный ответ: я не могу использовать массив, он не инициализирован.

Я могу сделать это внутри функции успеха:

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

И он будет доступен для любой другой функции.

...