簡體   English   中英

在 ajax 請求上使用 is_ajax_request 函數時,codeigniter 失敗

[英]codeigniter failed when use is_ajax_request function on ajax request

我正在嘗試使用 ajax 請求從面板管理員更新用戶密碼,在控制器上使用is_ajax_request()但此函數表示我不在 ajax 請求中。 為什么會這樣?

這是我的 ajax jquery:

$.ajax({
    url: urlTarget,
    traditional: true,
    type: 'post',
    dataType: 'json',
    data: {currentPassword:currentPassword, newPassword:newPassword},
    success: function ( result ) {
        if( result.status == 'success' ){
            window.location = baseUrl;
        }else{
            $("#login-invalid-input").show();
            $("#login-submit").attr("disabled", false);
        }
    },
    error: ajax_error_handling
});

在控制器上:

    private function ajax_checking(){
        if ( !$this->input->is_ajax_request() ) {
            redirect( base_url() );
        }
    }

    public function change_password(){
        $this->ajax_checking();
        $this->load->model("admin_model");

        $postData = $this->input->post();
        $id = $this->session->userdata('id_admin');

        if($this->admin_model->check_current_password($id, $postData['currentPassword'])){
            $this->admin_model->change_password($id, $postData['newPassword']);
            $send["status"] == "success";
        }else
            $send["status"] == "fail";

        echo json_encode($send);
    }

由於ajax_checking的結果為 false,系統將我重定向到設置的 url。 任何人都可以幫助我嗎?

is_ajax_request() ,此函數檢查是否已設置 HTTP_X_REQUESTED_WITH 服務器標頭,如果設置響應將為真,否則為假意味着它將返回布爾響應。

在您的 constants.php 文件中,您可以添加以下內容:

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 

然后在你的代碼中而不是

private function ajax_checking(){
    if ( !$this->input->is_ajax_request() ) {
        redirect( base_url() );
    }
}

使用

private function ajax_checking(){
    if ( !IS_AJAX ) {
        redirect( base_url() );
    }
}

更新

在每個 ajax 請求中設置標頭。

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('HTTP_X_REQUESTED_WITH', 'xmlhttprequest');
    }
});

感謝您的幫助,這是將我重定向到 baseUrl 的問題:

我在控制器上設置了這個,這是因為我在控制器上有這個腳本,將我重定向到 basicUrl:

    public function __Construct() {
        parent::__Construct();
        if($this->session->userdata('logged_in') ) {
            redirect( base_url() );
        }
    }

最近,當$this->input->is_ajax_request()在安裝了 Centos Web 面板 (CWP) 的 CentOS 服務器上無法運行時,我在 CodeIgniter 上遇到了類似的問題,而它在我的本地主機上運行良好。

我的解決方案是在我的 JavaScript 頂部添加以下內容:

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    }
});

由於實時服務器沒有發送 CodeIgniter 需要識別 Ajax 請求的X-Requested-With標頭。

暫無
暫無

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

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