我有以下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
。
如何解决此问题?
答案 0 :(得分:2)
你在ajax调用中声明变量,因此它是该函数的本地变量,你必须在ajax调用之外实例化变量,以便其他函数可以使用它。
答案 1 :(得分:0)
正确的答案是我不能使用未初始化的数组。
我可以在成功函数中执行此操作:
$.myNameSpace.badWords = new Array(3);
任何其他功能都可以使用。