Codeigniter - 在codeigniter中创建Vote Up系统

时间:2014-12-24 05:11:15

标签: javascript php jquery codeigniter

我正在尝试在我的codeigniter中创建一个名为“like”的投票。我使用的方法是我在http://www.technicalkeeda.com/codeigniter-tutorials/voting-system-using-jquery-ajax-and-php-codeigniter-framework

中找到的方法

并且更新在数据库上成功运行,但问题是因为视图中没有显示而输出的文本来自localhost“抱歉无法更新”。当我刷新页面时,“喜欢”的结果显示出来。

这是控制器

function voteme(){      
    $id_vote=  $this->input->post('id_vote');
    $upOrDown=  $this->input->post('upOrDown');
    $status ="false";
    $updateRecords = 0;     
    if($upOrDown=='upvote'){
        $updateRecords = $this->home_model->updateUpVote($id_vote);
    }
    if($updateRecords>0){
        $status = "true";
    }
    echo $status;
    $data['id_vote'] = $id_vote;
    redirect ('home',$data);
}

这是模型

function updateUpVote($id_vote){
    $sql = "UPDATE vote set like = like+1 WHERE id_vote =?";
    $this->db->query($sql, array($id_vote));
    return $this->db->affected_rows();
}

以下是视图

<button class="btn btn-success voteme" id="3_upvote"><span id="<?php echo $data['id_vote']?>_upvote_result" ><?php echo $data['like']?></span> <b>Like</b></button>

这是 javascript

<script type="text/javascript">
$(document).ready(function(){
      $(".voteme").click(function() {
        var id_vote = this.id;
        var upOrDown = id_vote.split('_'); 
        $.ajax({
            type: "post",
            url: "http://localhost/ngelol/home/voteme",
            cache: false,               
            data:'id_vote='+upOrDown[0] + '&upOrDown=' +upOrDown[1],
            success: function(response){                
                try{
                    if(response=='true'){   
                        var newValue = parseInt($("#"+id_vote+'_result').text()) + 1;            
                        $("#"+id_vote+'_result').html(newValue);
                    }else{
                        alert('Sorry Unable to update..');
                    }
                }catch(e) {     
                    alert('Exception while request..');
                }       
            },
            error: function(){                      
                alert('Error while request..');
            }
         });
    });
});

如何在没有刷新页面的情况下得到这样的结果?

非常感谢....

更新

我有新问题的人,有没有人知道如何在javascript中重定向页面...我的意思是,使用投票我们需要先登录,然后我更换  alert('Sorry Unable to update..'); 同  url: "localhost/latihan/login";但是它没有用......感谢您的帮助

3 个答案:

答案 0 :(得分:1)

问题出在你的控制器函数voteme中,在回显status之后你不应该使用redirect,如果你使用重定向,那么它将返回你的主页html,状态为true 。 因此,您可以使用is_ajax_request(),如果ajax请求为true,则使用exit;,否则使用redirect()

function voteme(){      
    $id_vote=  $this->input->post('id_vote');
    $upOrDown=  $this->input->post('upOrDown');
    $status ="false";
    $updateRecords = 0;     
    if($upOrDown=='upvote'){
        $updateRecords = $this->home_model->updateUpVote($id_vote);
    }
    if($updateRecords>0){
        $status = "true";
    }
    echo $status;
    // check for ajax request
    if(! $this->input->is_ajax_request()){ // if not ajax request
        $data['id_vote'] = $id_vote;
        redirect ('home',$data);// redirect it
    }
    exit;
}

即使您的referral link未使用redirect()

答案 1 :(得分:0)

试试这个:

function voteme(){      
   $id_vote=  $this->input->post('id_vote');
   $upOrDown=  $this->input->post('upOrDown');
   $status ="false";
   $updateRecords = 0;     
   if($upOrDown=='upvote'){
      $updateRecords = $this->home_model->updateUpVote($id_vote);
   }
  if($updateRecords>0){
     $status = "true";
  }
  return $status

}

答案 2 :(得分:0)

要使用javascript重定向,您可以使用'window.location.href':

window.location.href = "localhost/latihan/login";