我已经设置了我的JavaScript
function getData(uri) {
var $result;
var demoAPI = uri;
$.getJSON(demoAPI, function(data) {
$.each(data, function(key, val) {
names[key] = val["name"];
numbers.push(val["number"]);
});
}).done(function() {
for(i = 0; i < names.length; i++) {
var tmp = new Array(names[i], numbers[i]);
result.push(tmp);
}
return result;
});
}
问题是,有了这个设置,我无法使用这个功能:
var values = getData('/users');
因为return
语句位于$.getJSON
块内的闭包中,如果我在所述块之后调用return
它返回一个空数组,因为它在ajax调用之前被调用完成了。如果我尝试使用$.ajax()
,我将遇到同样的挑战。我需要帮助从函数getData()
返回生成的数组。
答案 0 :(得分:4)
正如您所发现的那样,您无法可靠地从异步函数返回数据。您需要传递一个回调函数,以便在收到数据时执行。试试这个:
function getData(uri, callbackFn) {
var $result;
$.getJSON(demoAPI, function(data) {
$.each(data, function(key, val) {
names[key] = val["name"];
numbers.push(val["number"]);
});
}).done(function() {
for(i = 0; i < names.length; i++) {
var tmp = new Array(names[i], numbers[i]);
result.push(tmp);
}
callbackFn(result);
});
}
getData('/users', function(result) {
// do what is required with the returned data...
});