2010-11-25 51 views
0

我在facebook上遇到了一些麻煩,比如api。我用下面的代碼創建類似按鈕:Facebook Like API

<fb:like href="http://www.nettunes.co.za/artist_profile.php?ref=fb&amp;amp;artist_id=<?PHP echo $row->artist_id;?>&amp;amp;show=albums&amp;amp;sub_section=song&amp;amp;id=<?PHP echo $row->song_id;?>" layout="box_count" show_faces="false" width="50" font="arial" title="<?PHP echo ucfirst($row->song_name);?> by <?PHP echo $row->artist_name;?> on www.nettunes.co.za"></fb:like> 

我然後偵聽該事件,並調用JavaScript函數,阿賈克斯運行一段PHP的是插入像到本地數據庫,以保持跟蹤都喜歡這位藝術家。使用此代碼:

var e = document.createElement('script'); 
e.type = 'text/javascript'; 
e.src = document.location.protocol + 
    '//connect.facebook.net/en_US/all.js'; 
e.async = true; 
document.getElementById('fb-root').appendChild(e); 
    FB.Event.subscribe('edge.create', function(response) { 
     var song_id = response.toString().split("&amp;id="); 
     likeSong(song_id[1]); 
    }); 

問題是,它不總是調用這個likeSong函數,並添加到數據庫。

有沒有人有過類似的問題?或者你知道更好的方法嗎?

感謝這麼多

照顧, Chregan

回答

2

你可能需要等待Facebook的庫是完全準備好,並檢查響應。

<div id="fb-root"></div> 
<script type="text/javascript" charset="utf-8"> 
window.fbAsyncInit = function() { 
    FB.init({appId:"1234567890", status:true, cookie:true, xfbml:true, session:null}); 
    FB.Event.subscribe('edge.create', function(response) { 
     if (response) 
     { 
      var song_id = response.toString().split("&amp;id="); 
      likeSong(song_id[1]); 
     } 
    }); 
} 

(function() { 
var e = document.createElement("script"); 
e.src = document.location.protocol + "//connect.facebook.net/en_US/all.js"; 
e.async = true; 
document.getElementById("fb-root").appendChild(e); 
}()); 
</script> 

您還應該確保無論likeSong定義Facebook的庫加載之前被初始化,您添加事件:一旦圖書館異步加載您可以用fbAsyncInit方法,這是由Facebook的叫做到這一點監聽器。

+0

謝謝!我會試試這個。 – Chregan 2010-11-27 07:48:58