捕获FB edge.create事件时的多个请求
我想在我的页面上使用Facebook的点赞按钮来进行投票。可惜的是,当我点击“点赞”时,我的函数会接收到3到5个请求,而不是只有一个。有没有办法防止这种情况发生呢?下面是我的示例代码:
FB.Event.subscribe('edge.create', function(href, widget) {
console.log(href, widget);
});
这是我的代码:
FB.Event.subscribe('edge.create', function(href, widget) {
$.ajax({
type: "POST",
url: "/votes/register",
data: "href="+href,
dataType: 'json',
success: function(data){
$(".list-submissions").html(data["html"])
}
});
return false;
});
或者我可以通过Django从函数的角度来阻止这种情况吗?这是我的函数代码:
def register_vote(request):
ip = request.META['REMOTE_ADDR']
url = request.POST.get("href", "")
id = os.path.basename(url)
try:
vote = Vote.objects.filter(ip=ip, id=id)
except:
vote = None
if not vote:
vote = Vote(ip=ip, uid=id)
vote.save()
html = render_finalists(request)
ajax = simplejson.dumps({
"html": html
}, cls=LazyEncoder)
return HttpResponse(ajax, mimetype='application/javascript')
2 个回答
0
如果你在网页中多次引用了Facebook的核心JavaScript SDK,那么你的回调函数可能会收到多次请求。也就是说,如果下面这个脚本标签(或者类似的标签)出现了不止一次,就会发生这种情况:
<script src="http://connect.facebook.net/en_US/all.js"></script>
1
我遇到了类似的问题,一直在用AJAX动态创建点赞按钮,这些按钮是针对特定内容的。但是‘edge.create’这个东西似乎在存储事件,每次我点击另一个Facebook点赞小部件时,它就会重复触发多次。
我真是头疼得厉害,到现在还没找到解决办法 :(
如果有人能快速帮忙,我会非常感激。
最后我搞定了这个问题,我只是把我从响应对象中得到的响应和我需要传递的那个进行比较,结果就成功了。
FB.Event.subscribe('edge.create', function(response) {
if ( response.toString() == shareUrl.toString() ) {} }