我不明白为什么我不能影响我的全局变量。我不明白为什么这不起作用..我相信它与SDK.REST.retriveMultipleRecords有关,但我不明白如何。正如您在第一个警报中看到的那样,它可以工但在第二场,它显示为“未定义”。 在这个fiddle中,我有一个关于定义全局变量的简单示例,它可以工作。
任何人都可以帮忙解决这个问题吗?为什么它不影响我的globalVar?
Players = new Array(); //GLOBAL VAR
function setPlayers(topNumber){
SDK.REST.retrieveMultipleRecords(
"gamify_utilizador",
"$select=gamify_utilizadorId,gamify_name,gamify_Ranking&$top="+topNumber+"&$orderby=gamify_Ranking asc",
function (results) {
if(results.length > 0){
for(var i = 0;i<results.length;i++){
Players.push(new Array(results[i].gamify_utilizadorId, results[i].gamify_name));
alert(Players[i]); // ALERT OK
}
}
else {
alert("No Contact records are available to set as the primary contact for the account.");
}
},
errorHandler,
function () {
//OnComplete handler
}
)
alert(Players[1]); // Alert says "Undefined"
};
document.onreadystatechange = function () {
if (document.readyState == "complete") {
setPlayers(4);
alert(Players[1]);
}
}
答案 0 :(得分:0)
而不是alert(Players[1]);
尝试此alert(Players[0]);
答案 1 :(得分:0)
您的数据是异步检索的,所以它在执行setPlayers函数后的某个时间可用,因此在alert(Players[1])
运行后的某个时间可用。
以下是一些验证它的代码:
setTimeout(function(){ alert(Players[1]) }, 3000); // check the variable after 3 seconds
您需要在成功处理程序(填充Players数组的函数)执行后使用数据。您可以查看Promises模式,该模式为异步编程提供了更传统的接口。
答案 2 :(得分:0)
认为它应该是因为内部函数尚未执行,因此数组在第1位仍然不包含任何值,只是在执行并完成此数组后将重置此值