Reddit风格的投票按钮

我正在尝试在我的网站上实现一个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("
"); //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=&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(); } }); });

你不想在那里放一个SQL查询,那不是AJAX。 您应该调用一个url处理程序,该处理程序具有执行查询的代码并返回带有结果的json。 因此,您在votes.php上的PHP应用程序应该执行此检查,如果此人已经投票,则返回错误。 然后你可以设置一个闪存用户已经投票的div。

所以例如你的应用程序可以返回json:{success:false,message:“用户已经投票”}

请参阅: http : //api.jquery.com/jQuery.post/ ,了解如何检索该json

编辑

这是我正在谈论的工作流程:

在index.php中,你有像现在这样的jquery,它会向votes.php发送用户ID以及他们投票的内容。

在votes.php中,您可以获得这些参数。 投票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函数中你可以解码它。 如果你获得成功,灰色按钮。 如果您已经投票错误,请不要计票,灰色按钮。 如果没有响应,请保留按钮并告诉用户出现错误。

投票结束后,’votes.php’返回’成功’或其他什么,您可以淡出按钮并分离点击事件。

不是在提交每个新投票之前查询,而是在页面构建时ping数据库 – 匹配您正在投票的对象的ID和用户ID与数据库中的投票,如果它返回,则用户已经投票赞成此项目,突出显示他们的投票(upvote arrow或downvote arrow) – 并从他们已经点击的箭头中删除点击事件。