2013-05-10 61 views
1

我已经使用PHP和Smarty在我的网站上投了一个投票功能。 这是它的HTML部分:jQuery,PHP和Smarty的投票系统

<p>{$vote} <a href="vote.php?q_vote=vote_up&question_id={$qid}"><i class="icon-thumbs-up"></i></a> <a href="vote.php?q_vote=vote_down&question_id={$qid}"><i class="icon-thumbs-down"></i></a></p> 

代码的PHP部分取票,并刷新了同一页面。

我想用jQuery做同样的事情,以便它不需要刷新页面。以下是我在HTML中写道:

$("#q_upvote").click(function() 
    { 
     var vote = "vote_up"; 
     var votedata = ""; 
     votedata = "vote= " + vote; 
     $.ajax({     
       type: 'POST', 
       url: 'vote.php', 
       data: votedata, 
       success: function(vote_msg){ 
       if(msg == 'ok') 
        { 
        //show the new vote 
        } 
             else 
             //show notification 
       } 
    } 
) 
</script> 

我想不出如何显示新的投票那里。你能帮助我吗?另外,我很感激,如果我被告知,如果我走的是正确的道路。

+0

什么是Ajax响应新的计票或什么? – 2013-05-10 12:20:22

+0

您需要将php响应更改为不提供完整页面,而只是提供您正在寻找的单个信息。 (或者几条信息的json字符串)。 – 2013-05-10 12:23:09

+1

你在函数vote_msg参数但你检查味精参数改变它。此外,这行数据:votedata,可以更改为数据:“vote = voteup”这将简化您的脚本,并且不需要太多变量。当你提供投票参数vote.php PHP文件返回什么? – Robert 2013-05-10 12:23:26

回答

1
  • 更正了您的html代码,使您拥有 票数的占位符。

  • 更正了Ajax调用,以便它传递与您的初始upvote定位点中的hrefs的 相同的参数。在Ajax调用

  • 固定的各种语法错误

HTML代码

<p> 
     <span class="votenumbers">{$vote}</span> 
     <a id="upvote_{$qid}" class="q_upvote" href="#"><i class="icon-thumbs-up"></i></a> 
     <a href="vote.php?q_vote=vote_down&question_id={$qid}"><i class="icon-thumbs-down</i</a> 
    </p> 

jQuery代码

$(".q_upvote").click(function() 
    { 
     var vote = "vote_up", 
      question_id = this.id.split('_')[1], 
      votedata = "q_vote="+vote+"&question_id="+question_id; 
     $.ajax({     
       type: 'POST', 
       url: 'vote.php', 
       data: votedata, 
       success: function(vote_msg){ 
        if(vote_msg== 'ok') 
         { 
         //show the new vote 
         $(this).find('.votenumbers').closest().html(parseInt($(this).find('.votenumbers').closest().html())+1) 
         } 
        else{ 
         //show notification 
        } 
       } 
      }); 
    } 
) 
+1

感谢您的回答。我无法理解这一行: 'var question_id = this.id.split('_')[1];' – jason 2013-05-10 12:44:24

+0

在这种情况下'this'指的是已被点击的锚点。因此,id('upvote _ {$ qid}')被字符'_'分割,然后'[1]'接受数组中的第二个元素(['upvote','{qid}' ]',由'split'函数返回,它是'$ qid'。你需要玩它才能看到:) – Mysteryos 2013-05-10 12:47:01

+0

这行不行: '$(this).find('。votenumbers' ).closest()。html(parseInt($(this).find('。votenumbers')。closest()。html()) - 1)' – jason 2013-05-10 14:06:28

0

在你知道的投票已正确保存的点,你可以增加在客户端上你们的选票,例如:

<script type="text/javascript"> 
var votes = 0; 
$("#myVoteNumberDiv").html(votes); 
</script> 

在点//show the new vote你会写:

votes++; //or in case he voted down: votes--; 
$("#myVoteNumberDiv").html(votes); 

告诉我,如果你的意思不同,我不完全确定我正确理解你的问题。

+1

他使用juery,你给他纯js :)? – Robert 2013-05-10 12:25:19

+0

@RobertPodwika只是为了展示这个概念; D但是你是对的,我改变了它。 – 2013-05-10 12:27:36

+0

你改变了它,情况更糟。只是$(“#tag”)。html(票),顺便说一句 - 投票比投票更快 - :) – Robert 2013-05-10 12:28:12