我试图从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
所以它没有设置变量
答案 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