$.getJSON调用中的JavaScript变量作用域

$.getJSON调用中的JavaScript变量作用域,javascript,jquery,scope,getjson,Javascript,Jquery,Scope,Getjson,为什么调用showOrders时,orders数组为空?我的服务返回4个对象,我可以在.push调用中遍历项目初始化,但返回的数组始终为空 var showOrders = function(orders){ $.each(orders, function(i, val){ alert(val.Order + "::" + val.Href); }); } var orders = (function(d){ var _r = [];

为什么调用showOrders时,orders数组为空?我的服务返回4个对象,我可以在.push调用中遍历项目初始化,但返回的数组始终为空

var showOrders = function(orders){
    $.each(orders, function(i, val){

        alert(val.Order + "::" + val.Href);         

    });
}
var orders = (function(d){
    var _r = [];
    $.getJSON("/_vti_bin/listdata.svc/Orders", function (data) {
        for(var i = 0; i < data.d.results.length; i++)
        {
            var o = data.d.results[i];

            _r.push({
                    Id: o.Id,
                    Order: o.Order, 
                    PurchaseDate: o.PurchaseDate, 
                    CustomerPO: o.CustomerPO, 
                    PurchasedBy: o.PurchasedBy, 
                    SubTotal: o.SubTotal, 
                    Status: o.Status,
                    Href: o.Path + "/DispForm.aspx?ID=" + o.Id
            });
        }
        return _r;
    });
    d(_r);
})(showOrders);  
var showOrders=函数(订单){
$。每个(订单、功能(i、val){
警报(val.Order+“:”+val.Href);
});
}
变量顺序=(函数(d){
var _r=[];
$.getJSON(“/”vti_bin/listdata.svc/Orders”),函数(数据){
对于(变量i=0;i
$。getJSON正在执行异步调用。您需要在getJSON调用的回调中执行d-callback(在循环之后):

var orders=(函数(d){
var _r=[];
$.getJSON(“/”vti_bin/listdata.svc/Orders”),函数(数据){
对于(变量i=0;i
我认为会有异步调用,所以在获得数据之前。。您的每个函数开始执行这类问题每天大约被询问100次。异步调用不能返回值!这就像打电话订购比萨饼一样。我想你可以从我传递的委托的使用中看出,我的意图是在检索数据后调用委托。我刚接错电话。
var orders = (function(d){
  var _r = [];
  $.getJSON("/_vti_bin/listdata.svc/Orders", function (data) {
      for(var i = 0; i < data.d.results.length; i++)
      {
          var o = data.d.results[i];

          _r.push({
                Id: o.Id,
                Order: o.Order, 
                PurchaseDate: o.PurchaseDate, 
                CustomerPO: o.CustomerPO, 
                PurchasedBy: o.PurchasedBy, 
                SubTotal: o.SubTotal, 
                Status: o.Status,
                Href: o.Path + "/DispForm.aspx?ID=" + o.Id
        });
      }
      d(_r);

  });

})(showOrders);