![](/img/trans.png)
[英]Codeigniter ajax request is not working when use external JS file
[英]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.