2015-09-10 4 views
0

У меня есть приложение, которое позволяет пользователям одной и той же компании с тем же именем проголосовать за определенные элементы, поэтому я не могу использовать IP для управления количеством голосов пользователей. Как я могу использовать jQuery, чтобы позволить пользователю голосовать только один раз?Как использовать jQuery, чтобы позволить пользователю голосовать только один раз?

JQuery:

$("#xmlDiv").on("click", ".upvote", function(e) { 
      var id = $(this).attr("id"); 
      var main = $(this); 
      $.ajax({ 
       type: 'post', 
       url: 'includes/upvote.php', 
       data: { "id":id }, 
       success(data) { 
       main.parent().find("div.votenum").html(data); 
       }, 
       error: function (xhr, textStatus, error) { 
        alert("Sorry!"); 
       } 
      }); 
     }); 

$("#xmlDiv").on("click", ".downvote", function(e) { 
     var main = $(this); 
     var id = $(this).attr("id"); 
     $.ajax({ 
      type: 'post', 
      url: 'includes/downvote.php', 
      data: { "id":id }, 
      success(data) { 
       main.parent().find("div.votenum").html(data); 
      }, 
      error: function (xhr, textStatus, error) { 
       alert("Sorry!"); 
      } 
     }); 
    }); 

HTML:

<img src="arrow-up-01-20.png" style="float:right;" class="upvote" id="5"> 
<img src="arrow-down-01-20.png" id="5" class="downvote" style="float:right;"> 
<div class="votenum" style="float:right;" id="5">12</div> 
+0

Лучшим способом было бы заставить войти в систему и проверить в базе данных, что они проголосовали только один раз. Быстрый и грязный способ - установить cookie, но это вряд ли безопасно. Это действительно не имеет никакого отношения к jQuery. – dave

ответ

1

Когда пользователь нажимает на upvote, вы можете добавить класс к DIV голосовала

main.addClass("voted"); 

и вы можете проверить с помощью hasClass ("v oted ")

$("#xmlDiv").on("click", ".upvote", function(e) { 
     var id = $(this).attr("id"); 
     var main = $(this); 

     if(main.hasClass("voted")) 
      return; 

     main.addClass("voted"); 

     $.ajax({ 
      type: 'post', 
      url: 'includes/upvote.php', 
      data: { "id":id }, 
      success(data) { 
      main.parent().find("div.votenum").html(data); 
      }, 
      error: function (xhr, textStatus, error) { 
       alert("Sorry!"); 
      } 
     }); 
    }); 

Я предлагаю снова контролировать на стороне сервера

0

Jquery не может сохранить память по загрузке страницы. Обновление страницы приводит к тому, что любая логика начинается с самого начала. Вам нужно будет задействовать логику сервера.

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

Смежные вопросы