jQuery命名空间变量未声明

时间:2011-06-01 17:36:28

标签: jquery undeclared-identifier

我有以下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 个答案:

答案 0 :(得分:2)

你在ajax调用中声明变量,因此它是该函数的本地变量,你必须在ajax调用之外实例化变量,以便其他函数可以使用它。

答案 1 :(得分:0)

正确的答案是我不能使用未初始化的数组。

我可以在成功函数中执行此操作:

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

任何其他功能都可以使用。