我正在尝试在我的网站上实现一个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();
}
});
});
答案 0 :(得分:2)
你不想在那里放一个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函数中你可以解码它。如果你获得成功,灰色按钮。如果您已经投票错误,请不要计票,灰色按钮。如果没有响应,请保留按钮并告诉用户有错误。
答案 1 :(得分:0)
投票结束后,'votes.php'返回'成功'或其他任何内容,您可以淡出按钮并分离点击事件。
不是在提交每个新投票之前查询,而是在页面构建时ping数据库 - 匹配您投票的对象的ID和用户ID与数据库中的投票,如果它返回,则用户已对此项目进行投票,突出显示他们的投票(upvote arrow或downvote arrow) - 并从他们已点击的箭头中删除点击事件。