1

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);  
4

1 に答える 1

3

$.getJSONは非同期呼び出しを実行しています。getJSON-callのコールバック内でd-callbackを実行する必要があります(ループの後):

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);  
于 2013-02-01T14:31:06.393 に答える