如何从这个函数返回正确的数据?
function getUserData(name) { 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 } }); return userData; }
我希望能够写下如下内容:
var userData = getUserData(name);
并让它返回那个userData对象。
你没有。
AJAX调用是asynchronous的 。 您需要以某种方式使用callback。
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. });