你不知道。
AJAX呼叫是异步。您需要以某种方式使用回调。
function getUserData(name, cb) {
var userData = {};
twitter.get('http://api.twitter.com/1/users/lookup.json', {
screen_name: name
}, function(data) {
userData = {
name: data[0].screen_name,
screenname: data[0].screen_name,
id: data[0].id,
url: data[0].url,
description: data[0].description
}
cb(userData);
});
}
getUserData(name, function(userData) {
// do stuff.
});
如果您使用jQuery 1.5,您可以使用延迟承诺,它们是jQuery Deferred对象。
function getUserData(name, cb) {
var def = new jQuery.Deferred();
twitter.get('http://api.twitter.com/1/users/lookup.json', {
screen_name: name
}, function(data) {
var userData = {
name: data[0].screen_name,
screenname: data[0].screen_name,
id: data[0].id,
url: data[0].url,
description: data[0].description
}
def.resolve(userData);
});
return def.promise();
}
var promise = getUserData(name);
promise.done(function(data) {
// do stuff.
});
你试过了吗?任何尝试调试?您发布的代码现在会发生什么?我没有看到任何明显的错误,所以这将有助于获得更多的细节 – 2011-04-30 14:55:00
您误解了异步编程的本质。函数返回时没有数据。当数据变为从呼叫返回时稍后执行回调。 – Orbling 2011-04-30 14:57:02