函数外部的Javascript数组访问

函数外部的Javascript数组访问,javascript,jquery,ajax,arrays,json,Javascript,Jquery,Ajax,Arrays,Json,我正在尝试使用$.getJSON获取json数据,它工作正常。 这是我的代码: $(document).ready(function(){ var MainArray = new Array(); $.getJSON('check-location.php?onload=true', function(result) { $.each(result, function(i){ MainArray[i] = result[i].Country

我正在尝试使用
$.getJSON
获取json数据,它工作正常。 这是我的代码:

$(document).ready(function(){
    var MainArray = new Array();
    $.getJSON('check-location.php?onload=true', function(result) {
        $.each(result, function(i){
            MainArray[i] = result[i].CountryName;
        });
    });

    $(".drop-down").append("<div>" + MainArray[0] + "</div>");
});
$(文档).ready(函数(){
var MainArray=新数组();
$.getJSON('check-location.php?onload=true',函数(结果){
$。每个(结果、函数(i){
MainArray[i]=结果[i].CountryName;
});
});
$(“.drop-down”).append(“+MainArray[0]+”);
});
我试图将它分配给数组以供以后使用,但当我尝试访问它并显示它时,我得到了未定义的

我确实得到了所有的数据,但当我将其分配给
MainArray
时,我无法在
$之外访问它。每个
函数我都不知道为什么。

这是因为Ajax是异步的,您试图附加一个不存在的值:

$.getJSON('check-location.php?onload=true', function(result) {
    $.each(result, function(i){
        MainArray[i] = result[i].CountryName;
    });
    $(".drop-down").append("<div>" + MainArray[0] + "</div>");
});
$.getJSON('check-location.php?onload=true',函数(结果){
$。每个(结果、函数(i){
MainArray[i]=结果[i].CountryName;
});
$(“.drop-down”).append(“+MainArray[0]+”);
});
这是因为Ajax是异步的,所以您试图附加一个不存在的值:

$.getJSON('check-location.php?onload=true', function(result) {
    $.each(result, function(i){
        MainArray[i] = result[i].CountryName;
    });
    $(".drop-down").append("<div>" + MainArray[0] + "</div>");
});
$.getJSON('check-location.php?onload=true',函数(结果){
$。每个(结果、函数(i){
MainArray[i]=结果[i].CountryName;
});
$(“.drop-down”).append(“+MainArray[0]+”);
});

因为
$.getJSON
是异步的,所以在成功返回数据之前不会更新
MainArray

但是,这条线

$(".drop-down").append("<div>" + MainArray[0] + "</div>");
$(“.drop-down”).append(“+MainArray[0]+”);
将在
$.getJSON
完成之前执行…因此它是
未定义的


您应该将其移动到某个位置,并在数据返回时执行它,即在回调中,因为
$.getJSON
是异步的,所以在成功返回数据之前,
MainArray
不会更新

但是,这条线

$(".drop-down").append("<div>" + MainArray[0] + "</div>");
$(“.drop-down”).append(“+MainArray[0]+”);
将在
$.getJSON
完成之前执行…因此它是
未定义的


您应该将其移动到某个位置,并在数据返回时执行它,例如,在回调中,就像每个人所说的那样,因为这是一个异步请求 您可以将其关闭(这不是一个很好的做法,但它会解决问题)

在$.getJSON调用之前添加此项

$.ajax({ async: "false" }); 

就像每个人说的,因为这是一个异步请求 您可以将其关闭(这不是一个很好的做法,但它会解决问题)

在$.getJSON调用之前添加此项

$.ajax({ async: "false" }); 

只是一张纸条。选择
[]
而不是
new Array()
。请注意。选择
[]
而不是
new Array()
。谢谢大家的帮助。谢谢大家的帮助。