我在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]);
}
是否由于某些闭合构造形成?还是我缺少一些基本概念?只是好奇地知道为什么即使我将数组声明为全局,也不会警告值。请详细说明。
答案 0 :(得分:16)
问题不在于范围。
问题是您正在进行AJAX调用,然后在AJAX调用完成之前立即继续执行下一个语句。
因此,在从AJAX调用填充数组之前,您alert(values[1]);
。
答案 1 :(得分:3)
这将修复它,使用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]); });
}