2014-04-17 128 views
0

這裏是我的代碼:的getJSON返回數據

var name; 
function getFBName(username) { 
    $.getJSON('http://graph.facebook.com/' + username, function (d) { 
     name = d.name; 
    }); 
} 
getFBName("zuck"); 
console.log(name); 

因爲小時我很努力,但我不能讓getFBName函數返回用戶的名稱。

這是JSON BTW:

{ 
    "id": "4", 
    "first_name": "Mark", 
    "gender": "male", 
    "last_name": "Zuckerberg", 
    "link": "https://www.facebook.com/zuck", 
    "locale": "en_US", 
    "name": "Mark Zuckerberg", 
    "username": "zuck" 
} 
+0

AJAX調用是不同步的(異步JavaScript和XML)。函數調用是。函數完成後,返回值將從AJAX返回。 – jwatts1980

+0

請嘗試從您的瀏覽器訪問http://graph.facebook.com/zuck,並讓我們知道結果。如果你用提琴手捕捉到反應會更好。 – DadyFuji

回答

4

正如@ jwatts1980說,這是執行順序的問題。 $.getJSON將在響應到達客戶端之前立即返回,因此當您運行console.log時,它仍將等待。一種可能的解決方案是:

function getFBName(username) { 
    $.getJSON('http://graph.facebook.com/' + username, function (d) { 
     console.log(d.name); 
    }); 
} 
getFBName("zuck"); 

這將正確記錄Mark Zuckerberg。如果你有處理輸出多種方式,它也可以是有趣的設置callback功能:

function getFBName(username, callback) { 
    $.getJSON('http://graph.facebook.com/' + username, function (d) { 
     callback(d.name); 
    }); 
} 

function handleName(name) { 
    // Do a lot of things here 
    console.log(name); 
} 

getFBName("zuck", handleName); 
+0

是的,使用回調的方式! +1 – tymeJV