捕获FB edge.create事件时的多个请求

1 投票
2 回答
1564 浏览
提问于 2025-04-16 08:04

我想在我的页面上使用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() ) {} }

撰写回答