2013-05-10 4 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> 

РНР часть кода принимает голос и обновляет ту же страницу.

Я хочу сделать то же самое, используя 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

что ответ Аякса подсчет новое голосование или что? –

+0

Вам нужно изменить php-ответ, чтобы не дать полную страницу, а вместо этого просто предоставить единственную информацию, которую вы ищете. (Или json-строка из нескольких фрагментов информации). –

+1

у вас есть функция vote_msg param, но вы проверяете msg param изменить его. Также данные строки: votedata, могут быть изменены на данные: «vote = voteup», это упростит ваш скрипт, и вам не понадобится так много переменных. Когда вы предоставляете параметр param для vote.php, что возвращает php-файл? – Robert

ответ

1
  • Исправленная ваш HTML-код, так что у вас есть заполнитель для количества голосов.

  • Исправлен вызов Ajax, так что он передает те же параметры, что и в 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

+0

В этом контексте 'this' относится к якорю, который был нажат.Таким образом, id ('upvote _ {$ qid}') «разделяется» символом '_', тогда' [1] 'принимает второй элемент в' array (['upvote', '{qid}' ] ', возвращенный функцией' split', которая является '$ qid'. U gotta играть с ней, чтобы убедиться сами :) – Mysteryos

+0

эта строка не работает: ' $ (this) .find ('. votenumbers') .closest() .html (parseInt ($ (this) .find ('. votenumbers'). closeest(). html()) - 1) ' – jason

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

он использует юность, и вы даете ему чистые js :)? – Robert

+0

@RobertPodwika просто для того, чтобы показать концепцию; D, но вы правы, я изменил ее. –

+0

Вы изменили его, и это еще хуже. просто $ («# tag»). html (голосов) и, кстати, -votes быстрее, чем голоса. :) – Robert

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