Facebook FB.Event.subscribe与edge.create回调“bug”

时间:2011-04-05 21:03:39

标签: facebook jquery facebook-graph-api facebook-social-plugins

我正在使用edge.create回调来解决一个非常奇怪的问题。

我正在做的是每次发生edge.create或edge.remove事件时执行对服务器的ajax调用(第一个是喜欢而第二个是不同于页面)。

继承代码

        // this will fire when any of the like widgets are "liked" by the user
            FB.Event.subscribe('edge.create', function(href, widget) {
                var dataSend = 'ajaxFace=true&submitAdd=true&code='+SomeCodeToAdd;
                $.ajax({
                    type: 'POST',
                    url: 'http://somewebpage.com',
                    data: dataSend,
                    success: function(data) {
                        alert(data);
                    },
                    erro: function(data) {
                        alert('Try again later');
                    }
                });
            });

            //this will fire when any widgets are "disliked" by the user
            FB.Event.subscribe('edge.remove', function(href, widget){
                var dataSend = 'ajaxFace=true&submitDelete=true&code='+SomeCodeToRemove;
                $.ajax({
                    type: 'POST',
                    url: 'http://somewebpage.com',
                    data: dataSend,
                    success: function(data) {
                        alert(data);
                    },
                    erro: function(data) {
                        alert('Try again later');
                    }
                });
            });

现在,发生了什么。

'edge.remove'事件的功能运行顺畅,没有任何问题。

但是,当用户单击喜欢时,代码只是不在ajax调用的成功部分上运行,我尝试了一个简单的警报,如alert('test');但也没有任何反应。但是,代码在后端工作正常,我想添加的代码成功添加。

但是,如果我设置async:false代码可以正常工作,则会在页面上显示警报,但浏览器会出现令人讨厌的“锁定”,我真的想避免这种情况。

所以,任何人都知道这里到底发生了什么?

PS。:本页面上的其他2个facebook元素,评论和活动供稿。我不知道,但我的印象是活动饲料可能与此有关...

2 个答案:

答案 0 :(得分:0)

我认为这是某种范围问题。如果你定义了包含FB.Event.subscribe范围之外的ajax调用的函数,并且只是从FB.Event.subscribe中调用该函数,那么可能会解决问题。

答案 1 :(得分:0)

HI i was facing the same problem but for different FB event. Here is my code an it 100% working :-

<!doctype html>
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
  <meta charset="utf-8">
  <title>Facebook Like Button</title>
  <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>--->(DO not forget to include)
</head>
<body>
<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: '464134126954048', status: true, cookie: true,xfbml: true});
    FB.Event.subscribe("message.send", function(targetUrl) {
     $.ajax({
        url:'abc.php',
        type:'POST',
        data:{name:'sunlove'},
        success:function(data)
        {
            alert("I am here");
        }
     });      
    });

  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
<fb:send href="http://demo.antiersolutions.com/studybooster1.2"></fb:send>
 <script type="text/javascript" src="http://platform.twitter.com/widgets.js"> </script> 

</body>
</html>
You can just copy and make new file and customize according to your need