簡體   English   中英

Codeigniter Ajax Post無法正常工作

[英]Codeigniter Ajax Post not working

大家好,我試圖為喜歡和不喜歡的評論創建簡單的投票,但是我想用jquery Ajax做到這一點,所以我不想在有人喜歡時刷新頁面。

這是我的jQuery代碼

$(document).ready(function(){
      $(".vote-btn").click(function() {
        var voteId = this.id;
        var upOrDown = voteId.split('_'); 
        // alert(upOrDown); = provides -->  id,name
        // var all = 'voteId:'+upOrDown[0]+ ',upOrDown:' +upOrDown[1];
        // alert(all);

        $.ajax({
            type: "POST",
            url: "http://localhost/Dropbox/cipr/index.php/demo",
            cache: false,
            dataType:'json',            
            data:{'voteId='+upOrDown[0] + '&upOrDown=' +upOrDown[1],
            success: function(response){                
                try{
                    if(response=='true'){   
                        var newValue = parseInt($("#"+voteId+'_result').text()) + 1;            
                        $("#"+voteId+'_result').html(newValue);
                    }else{
                        alert('Sorry Unable to update..');
                    }
                }catch(e) {     
                    alert('Exception while request..');
                }       
            },
            error: function(){                      
                alert('Error while request..');
            }
         });
    });
});

這是我的控制器代碼Demo.php

<?php

類Demo擴展了CI_Controller {

function Demo(){
    parent::Controller();
    $this->load->model('sygjerimet');
}

public function index(){

    $voteId=  $this->input->post('voteId');
    $upOrDown=  $this->input->post('upOrDown');

    $status ="false";
    $updateRecords = 0;

    if($upOrDown=='voteup' || true){
        $updateRecords = $this->sygjerimet->updateUpVote($voteId);
    }else{
        $updateRecords = $this->sygjerimet->updateDownVote($voteId);
    }

    if($updateRecords>0){
        $status = "true";
    }
    echo $status;
}

這是我的模型代碼sygjerimet.php

<?php 

Sygjerimet類擴展了CI_Model {

function shtoSygjerimin()
{
    $permbajtja = $this->input->post('idea');
    $data = array(
        'permbajtja' => $permbajtja
    );

    $this->db->insert('pr_sygjerimet', $data);

}

function updateDownVote($voteId){
    $sql = "UPDATE pr_sygjerimet set vote_down = vote_down+1 WHERE ID =?";
    $this->db->query($sql, array($voteId));
    return $this->db->affected_rows();
}

function updateUpVote($voteId){
    $sql = "UPDATE pr_sygjerimet set vote_up = vote_up+1 WHERE ID =?";
    $this->db->query($sql, array($voteId));
    return $this->db->affected_rows();
}

}

這是我的查看代碼

<?php
          $query = $this->db->query('SELECT * FROM pr_sygjerimet');

            foreach ($query->result() as $row)
            {
                echo "<div class='sygjerimi'>";
                echo htmlspecialchars($row->permbajtja);
                if(!$log_in):
                echo '<br>';
                echo ' <button id="'.$row->ID.'_votedown" class="vote-btn"><i class="fa fa-thumbs-down">'.htmlentities($row->vote_down).'</i></button> ';
                echo ' <button id="'.$row->ID.'_voteup" class="vote-btn"><i class="fa fa-thumbs-up">'.htmlentities($row->vote_up).'</i></button> ';
                endif;
                echo "</div>";
            }

        ?>

當我點擊投票執行代碼時,就是這樣

alert('Error while request..');

如果有人可以幫助,那就太好了:)謝謝

這很可能是CI CSRF保護; 如果您使用POST,CI會自動檢查CSRF隱藏字段,並且由於您是自己構建ajax發布的,因此它不會發送隱藏字段,因此會隨身攜帶。

檢查config / config.php文件中的幾條$config['csrf_*']行。 您可以禁用(但我不建議這樣做)。 您還可以在jQuery中序列化表格並將其發送,它應該可以為您工作,並使您免受CSRF攻擊的影響更大。

只是為了將其排除在外,您可以禁用“ csrf_protection”,然后再啟用它,然后更改您的javascript以序列化表格並將其用作ajax帖子中的數據。

嘗試這個

$.ajax({
    //pull the toke csrf like this
    data:{'<?php echo $this->security->get_csrf_token_name();?>':'<?php echo $this->security->get_csrf_hash();?>'},

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM