[英]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.