[英]Confusion in variable scope in javascript
我在js中有一個函數,它填充一個全局數組,其值從服務器腳本獲取為json:
function populateValues(id) {
var values=new Array();
$.getJSON(
'<?PHP echo base_url();?>admin/forums/getForumById/' + id ,
function(data){
$.each(data,function(k,v){
values.push(v);
});
alert(values[1]);
}
);
}
這很好,並提醒所需的值。 但是當我嘗試在循環之后提醒它時,值會丟失並且我得到一個未定義的。 情況如下:
function populateValues(id) {
var values=new Array();
$.getJSON(
'<?PHP echo base_url();?>admin/forums/getForumById/' + id ,
function(data){
$.each(data,function(k,v){
values.push(v);
});
}
);
alert(values[1]);
}
是否由於某些閉合構造形成? 還是我缺少一些基本概念? 只是好奇地知道為什么即使我將數組聲明為全局,也不會警告值。 請說清楚。
問題不在於范圍。
問題是您正在進行AJAX調用,然后在AJAX調用完成之前立即繼續執行下一個語句。
因此,你alert(values[1]);
在從AJAX調用填充數組之前。
這將修復它,使用AJAX調用返回的Promise對象:
function populateValues(id)
{
var values=new Array();
$.getJSON('<?PHP echo base_url();?>admin/forums/getForumById/'+id,function(data){
$.each(data,function(k,v) {
values.push(v);
});
}).done(function() { alert(values[1]); });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.