Кнопка для голосования в стиле Reddit - PullRequest
1 голос
/ 12 февраля 2011

Я пытаюсь внедрить кнопку голосования в стиле Reddit на моем сайте.У меня это работает хорошо, единственная проблема в том, что пользователи могут голосовать неограниченное количество раз в настоящее время.Мне нужно, чтобы он выполнил запрос SQL и проверил базу данных, чтобы узнать, проголосовали ли они, прежде чем принять голосование.

Вопрос: где я могу поместить SQL-запрос в этот AJAX POST, который отключает кнопку, если голосование существует?Вот что у меня пока так:

$(function(){
    $("a.vote_up").click(function(){
    //get the id



    the_id = $(this).attr('id');

    // show the spinner
    $(this).parent().append("<div id='spinnerDiv' style='width:20px; height:20px; float:right; margin-right:570px;'><img src='images/spinner.gif'/></div>");

    //fadeout the vote-count 
    $("span#votes_count, span#vote_buttons"+the_id).fadeOut("fast");


    //the main ajax request
        $.ajax({
            type: "POST",
            data: "action=vote_up&id="+$(this).attr("id"),
            url: "votes.php?personid=<?php echo $personid;?>&userid=<?php echo $userid;?>",
            success: function(msg)
            {   

                $("span#votes_count"+the_id).html(msg);
                //fadein the vote count
                $("span#votes_count"+the_id).fadeIn();
                //remove the spinner
                $("#spinnerDiv").remove();
                $("span#vote_buttons"+the_id).fadeIn();

            }
        });

    });

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Вы не хотите помещать туда SQL-запрос, это не AJAX.Вы должны вызвать обработчик URL, который имеет код для выполнения запроса и вернуть json с результатом.Таким образом, ваше PHP-приложение на voices.php должно выполнить эту проверку и вернуть ошибку, если человек уже проголосовал.Затем вы можете установить div, который будет мигать, если пользователь уже проголосовал.

Так, например, ваше приложение может вернуть json: {success: false, сообщение: "пользователь уже проголосовал"}

см. http://api.jquery.com/jQuery.post/ о том, как получить этот json

EDIT

Вот рабочий процесс, о котором я говорю:

В index.php у вас есть jquery кактеперь у вас есть, и он ДОЛЖЕН голосовать. Идентификатор пользователя и то, за что они голосуют. PTS, затем вы получите эти параметры.Логика в php голосов будет выглядеть примерно так:

$query = sprintf("SELECT * from votes uid='%s' AND vote_id='%s'",
mysql_real_escape_string($uid),
mysql_real_escape_string($vote_id));

if(mysql_query($query)){
   return json_encode(array("status" => 'failure', "message" => "user already voted");
}
else{
   do_vote($uid,$vote_id);
   return json_encode(array("status" => "success"));
}

Тогда в вашей функции ajax вы можете декодировать это.Если вы добьетесь успеха, серая кнопка.Если вы получили ошибку, за которую проголосовали, не подсчитывайте голоса и нажмите кнопку серого цвета.Если вы не получили ответа, оставьте кнопку и сообщите пользователю, что произошла ошибка.

0 голосов
/ 12 февраля 2011

После того, как голос подан, и что «voices.php» возвращает «успешно» или что-то еще, вы можете отодвинуть кнопку назад и отменить событие щелчка.

Вместо того, чтобы запрашивать перед отправкой каждого нового голоса, pingбаза данных при создании страницы - сопоставьте идентификатор объекта, за который вы голосуете, и идентификатор пользователя с голосами в базе данных, и, если получится, что пользователь уже проголосовал по этому пункту, выделите тот голос, за который он проголосовал.(стрелка вверх или стрелка вниз) - и удалите событие щелчка из стрелки, по которой они уже щелкнули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...