2011-02-11 84 views
1

我想在我的網站上實現一個投資分析風格的投票按鈕。我有它運作良好,唯一的問題是用戶目前可以投票無限次。我需要它來運行一個SQL查詢並檢查數據庫,看看他們在接受投票前是否投了票。Reddit式的投票按鈕

問題是:我在哪裏可以將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

你不想把SQL查詢放在那裏,那不是AJAX。你應該調用一個包含代碼的url處理程序來執行查詢並返回json的結果。所以你的PHP應用程序在votes.php應該做這個檢查,並且如果這個人已經投票了,就會返回一個錯誤。然後你可以設置一個div,這個用戶已經投票了。

因此,例如,您的應用程序可以返回JSON: {成功:假消息: 「用戶已經投票」}

見: http://api.jquery.com/jQuery.post/如何檢索JSON

編輯

這裏是我正在談論的工作流程:

在index.php中你有jquery,就像你現在一樣,它發佈到votes.php用戶標識和他們投票的內容。

在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函數中,你可以解碼這個。如果你獲得成功,灰色按鈕。如果您的投票出現錯誤,請不要對投票進行計數,並灰掉按鈕。如果您沒有迴應,請留下按鈕並告訴用戶有錯誤。

+0

感謝您的回覆。我仍然對如何將JSON返回給index.php感到困惑。如果PHP在vote.php POST一個布爾值(不投票或不),然後在index.php上使用JSON來獲取該布爾值的結果? – user547794 2011-02-12 18:56:52

+0

你的index.php應該發佈用戶ID和他們投票的內容。然後在vote.php中的代碼應該看看他們是否投了票。如果他們已經投票了,像我說的那樣返回一個JSON散列。在AJAX中,JavaScript發起對某個URL的請求(如votes.php)並異步獲取響應。我會爲你更新我的答案 – 2011-02-12 20:55:08

0

表決投票並且'votes.php'返回'成功'或其他任何,你可以淡出按鈕並分離點擊事件。

在提交每個新投票之前,請不要進行查詢,而是在建立頁面時ping數據庫 - 將您投票的對象的ID和用戶ID與數據庫中的投票進行匹配,如果它回來用戶已經對這個項目進行了投票,突出顯示他們的投票(upvote arrow或downvote arrow) - 並從他們已經點擊的箭頭中刪除點擊事件。