0

我有一個簡單的問題,一直在堆棧溢出搜索有關於這個主題的一些問題,但不能得到一個工作解決方案。從回調函數中獲取FB.api的值?

我有獲得網頁數的簡單功能,喜歡的JavaScript SDK:

function getLikes(div, graf) { 
    var numblike; 
    FB.api(graf, function(response) { 
     var numblike = response.likes; 
     $(div).prepend(numblike); 
    }); 
    return numblike; // can't get it to return 
} 

var pLike = getLikes ("#mydiv", /app_id); // always undefined 

功能運作以及預暫時擱置權數,以我的格但回報總是將我的變量爲未定義。我知道腳本運行異步,我需要使用回調函數,但是我無法正確理解它。

回答

0

這被稱爲javascript event loop。你不能從函數返回麻煩,因爲它只能在FB.api的回調中設置。 所以你可以做類似 - 只發送回調:

function getLikes(div, graf,callback) { 
    FB.api(graf, function(response) { 
    var numblike = response.likes; 
    $(div).prepend(numblike); 
    callback(numblike); 
    }); 

} 

getLikes ("#mydiv", /app_id,function(numblike){ 
    alert(numblike); 
}); // always undefined 
+0

在函數內部警報之前太工作。這裏的目標是調用這個函數,並讓頁面喜歡全局變量,數組更精確。所以我可以從幾個不同的fb頁面獲得頁面喜歡,將它們存儲在一個數組中,然後將它們總結在一起。所以我會需要'var pLikes = getLikes(etc ...)'返回一個數字,然後全局性地使用...在你的情況下,我得到警報但var仍未定義。 – 2013-03-20 20:55:53

+0

好吧。這只是一個例子,你可以如何控制你的變種jeezes。 這裏的關鍵是你可以通過回調來訪問從facebook的麻木狀態。所以你可以設置var arr = [];上面和裏面的回調,而不是警報(麻木),你可以做arr.push(麻木); 。使用你的編程技能有點... – Adidi 2013-03-20 21:01:02

+0

謝謝你對此的意見,但我無法按照我想要的方式工作。切換到FB PHP SDK並在幾分鐘內解決了問題... – 2013-03-27 14:06:19

0

你decalred numblike兩次,只是刪除在第二個變種聲明:

function getLikes(div, graf) { 
    var numblike; 
    FB.api(graf, function(response) { 
    numblike = response.likes; // var removed 
    $(div).prepend(numblike); 
    }); 
return numblike; 
}