javascript - 从 Closure Within Block Within Function 返回数据

标签 javascript jquery ajax

我已经这样设置了我的 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 block 中的闭包中,如果我在所述 block 之后调用 return 它返回一个空数组,因为它在 ajax 调用完成之前被调用。如果我尝试使用 $.ajax(),我将遇到同样的挑战。我需要帮助从函数 getData() 返回生成的数组。

最佳答案

正如您所发现的,您无法从异步函数可靠地返回数据。您需要传递一个回调函数,以便在接收到数据时执行。试试这个:

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...
});

关于javascript - 从 Closure Within Block Within Function 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219672/

相关文章:

javascript - Javascript可以得到与C语言memcpy函数相同的结果吗

jquery - HTML 表格和悬停图像和链接

javascript - 通过 php 将 Annotorius 注释数据从 Image Slider 保存到 mySQL

javascript - 类型错误 : Cannot read property 'open' of undefined File Upload Spring MVC JQuery AJAX

PHP 文件未成功接收 AJAX 变量

java - python webdriver 是如何工作的?

javascript - 方法后的 ES6 语法字符串

javascript - 改变jqplot中y轴标签区域的宽度

c# - 如何禁用刷新页面 ajax 调用?

javascript - 添加日期以将当前日期设置为明天 - Javascript