返回嵌套在ajax回调中的数据

时间:2017-05-04 10:52:59

标签: javascript jquery ajax

我试图从ajax函数获取数据到我的实际应用程序,但我似乎无法传递函数之外的数据,我读了其他问题并尝试了他们的推荐但它似乎没有工作,因为它不等待ajax在尝试返回数据之前完成加载, 我试图返回uid,以便我可以做类似的事情

user = getUserID('test');

而不是

getUserID('user', function(id){ console.log(id); });

因为我将返回的数据分配给变量

getUserID = function(user, cb) {
    var uid;
    $.ajax({
        type: "GET",
        url: "/user_comment.php",
        data: {
            user: user
        },
        success: function(result) {
            if (result) {
                uid = /name="recipient_id" value="(.*)"/g.exec(result)[1];
                console.log('1 ' + uid);
                if(cb) {
                    try {
                        cb(null, uid);
                    } catch(e) { cb(e); }
                }
            } else {
                console.log("ERROR!! - No data returned !")
            }
        }
    });
    console.log('2 ' + uid);
    return uid;
},

现在所做的一切都是

2 undefined
1 5511194
2 undefined
1 1462473
2 undefined
1 5469682

所以它没有设置变量

1 个答案:

答案 0 :(得分:0)

您的代码在应用任何值之前返回“uid”的值。您可以看到您的变量在“成功”回调中设置。这意味着只有在异步调用完成后才会调用此回调。您的“getUserID”函数将结束并且“return”语句将在回调之前执行。在调试器中使用您的代码,您将看到实际发生的事情。所以你应该做的是使用“success”回调中的返回值而不是“getUserID”返回的值。像这样:

getUserID('test', function(uid){
... do your stuff here => uid is defined and has the value you're looking for
});

但是不要试图做类似的事情:

var uid = getUserID('test');
... things and stuff