你不知道。
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