2

我在 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]);
}

是因为形成了一些封闭结构吗?还是我缺乏一些基本概念?只是想知道为什么即使我将数组声明为全局数组也不会提醒这些值。请阐明一些观点。

4

2 回答 2

16

问题不在于范围。

问题是您正在进行 AJAX 调用,然后在 AJAX 调用完成之前立即继续执行下一条语句。

因此,您alert(values[1]);在从 AJAX 调用填充数组之前。

于 2012-12-28T15:38:16.833 回答
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]); });
}    
于 2012-12-28T15:42:18.410 回答