Многократный запрос, когда перехвачено событие FB edge.create - PullRequest
1 голос
/ 05 декабря 2010

Я хотел использовать кнопку «лайк» в 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 ]

1 голос
/ 17 января 2011

Я сталкиваюсь с немного такой же проблемой, создавая похожие кнопки на лету, используя AJAX, специфично для контента, но иногда с помощью функции edge.create, как сохранять событие, увеличивать события edge.create и запускать несколько раз, когда я нажимаюна другом виджете, похожем на FB.

Пчела так сильно бьет меня по голове, пока не повезло: (

Любая быстрая помощь, стоит оценить.

Наконец я взломал ее, просто сравнил ответ, который я получал от объекта ответа, с тем, который мне нужно было передать, и это работает.

FB.Event.subscribe('edge.create', function(response) { 
            if ( response.toString() == shareUrl.toString() ) {} }
0 голосов
/ 08 декабря 2010

Вы можете получить несколько запросов к функции обратного вызова, если на базовый JS SDK Facebook ссылались несколько раз, т. Е. Следующий тег (или варианты) сценария повторяется:

<script src="http://connect.facebook.net/en_US/all.js"></script>
...