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;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>

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("&amp;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

Foi útil?

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("&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>

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top