我正在使用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元素,评论和活动供稿。我不知道,但我的印象是活动饲料可能与此有关...
答案 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