1

我遇到了 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 元素,评论和活动提要。我不知道,但我的印象是活动提要可能与此有关......

4

2 回答 2

0

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

于 2011-07-26T17:08:56.167 回答
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
于 2013-05-08T12:57:32.690 回答