我有一个单独的 .js 文件和用于 json 请求的命名空间。 我有另一个 .js 文件和命名空间用于实际逻辑。
我似乎无法将结果返回到我的逻辑层。
var jsonResult = Blah.Data.LoadAggregates();
alert(jsonResult);
alert(jsonResult.d.length);
alert(jsonResult.length);
以上所有调用都返回未定义。
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);
最佳答案
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);
});
关于javascript - 尝试从另一个命名空间中的方法获取 json 结果,但出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812043/