2010-05-11 20 views
1

我有一个单独的.js文件和命名空间用于json请求。 我有另一个.js文件和命名空间的实际逻辑。试图从另一个命名空间中的方法获得json结果,有问题

我似乎无法得到结果回我的逻辑层。

var jsonResult = Blah.Data.LoadAggregates(); 

alert(jsonResult); 
alert(jsonResult.d.length); 
alert(jsonResult.length); 

上述所有通话都返回undefined。

Blah.RegisterNamespace("Blah.Data"); 

(function(Data) { 


    Data.LoadAggregates = function() { 

     $.ajax({ 
      type: "POST", 
      url: "asdf.asmx/GetAggregates", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data) { 
       ??????? 

      }, 
      error: function(msg) { 
       alert("error" + msg); 
      } 
     }); 

    }; 

})(Blah.Data); 

回答

1

AJAX调用是异步的,这意味着$.ajax调用不会等待服务器的响应。

因此,您的LoadAggregates函数在服务器应答之前完成执行

为了获得服务器的响应,您的LoadAggregates函数需要一个回调参数,方式为$.ajax

例如:

Data.LoadAggregates = function(callback) { 

    $.ajax({ 
     type: "POST", 
     url: "asdf.asmx/GetAggregates", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(data) { 
      //Do something to the data if you want to 

      callback(data);  //You can pass any parameters you want 
     }, 
     error: function(msg) { 
      alert("error" + msg); 
     } 
    }); 

}; 

你可以这样称呼它:

Blah.Data.LoadAggregates(function(jsonResult) { 
    alert(jsonResult.length); 
}); 
+0

大加赞赏,我有一种感觉,它与时间做:) – Blankman 2010-05-11 16:43:03