Facebook como API
-
28-09-2019 - |
Pergunta
Estou tendo alguns problemas com a API do Facebook. Estou criando o botão LIFT com o seguinte código:
<fb:like href="http://www.nettunes.co.za/artist_profile.php?ref=fb&amp;artist_id=<?PHP echo $row->artist_id;?>&amp;show=albums&amp;sub_section=song&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>
Estou então ouvindo o evento e chamando uma função JavaScript, que o Ajax executa um pedaço de PHP que insere o gênero no banco de dados local para acompanhar todos os gostos deste artista. Usando este código:
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("&id=");
likeSong(song_id[1]);
});
O problema é que ele nem sempre chama isso de função de gente e adicionar o banco de dados.
Alguém já teve um problema semelhante antes? Ou você conhece uma maneira melhor de fazer isso?
muito obrigado
Cuide Chregan
Solução
Você provavelmente precisa esperar que a biblioteca do Facebook esteja totalmente pronta e verifique a resposta. Você pode fazer isso com o fbAsyncInit
Método, chamado pelo Facebook, uma vez que a biblioteca carregue de forma assíncrona:
<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("&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>
Você também deve garantir que, onde quer que o alvo seja definido, seja inicializado antes que a biblioteca do Facebook seja carregada e você adicione o ouvinte do evento.