2010-05-11 22 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