我尝试使用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,系统会将我重定向到设置的网址。有人可以帮帮我吗?
答案 0 :(得分:0)
is_ajax_request()
,此函数检查是否已设置HTTP_X_REQUESTED_WITH服务器头,如果set response为true,否则为false表示它将返回布尔响应。
在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');
}
});
答案 1 :(得分:0)
我在控制器上设置了这个, 它发生是因为我在控制器上有这个脚本,将我重定向到basicUrl:
public function __Construct() {
parent::__Construct();
if($this->session->userdata('logged_in') ) {
redirect( base_url() );
}
}
答案 2 :(得分:0)
最近我在使用 CodeIgniter 时遇到了类似的问题,$this->input->is_ajax_request()
在安装了 Centos Web 面板 (CWP) 的 CentOS 服务器上无法运行,而在我的本地主机上运行良好。
我的解决方案是在我的 JavaScript 之上添加以下内容:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}
});
由于实时服务器没有发送 CodeIgniter 需要识别 Ajax 请求的标头 X-Requested-With
。