在Web开发中,AJAX请求是实现页面无刷新交互的核心方式,而CodeIgniter作为轻量级的PHP框架,提供了便捷的方法来处理这类请求并返回JSON格式的数据。下面详细介绍具体的实现步骤和技巧。

CodeIgniter处理AJAX请求的基础流程
处理AJAX请求的核心是先接收前端传递的参数,再进行业务逻辑处理,最后返回响应。首先需要在控制器中编写对应的方法,前端通过指定的URL发送AJAX请求到该方法。
1. 接收AJAX请求参数
CodeIgniter可以通过$_POST、$_GET或者框架提供的输入类来获取参数,输入类会自动处理安全过滤,更推荐使用。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Ajax_controller extends CI_Controller {
public function __construct() {
parent::__construct();
// 加载输入类,默认已经自动加载,这里仅为说明
$this->load->helper('url');
}
// 处理AJAX请求的示例方法
public function handle_ajax() {
// 获取POST传递的参数,第二个参数为true表示开启XSS过滤
$username = $this->input->post('username', TRUE);
$age = $this->input->post('age', TRUE);
// 也可以获取GET参数,使用$this->input->get('参数名', TRUE)
}
}
2. 验证和处理参数
接收到参数后,需要对参数的合法性进行验证,比如判断是否为空、格式是否正确等,避免后续业务逻辑出现异常。
<?php
// 接上面的handle_ajax方法内容
public function handle_ajax() {
$username = $this->input->post('username', TRUE);
$age = $this->input->post('age', TRUE);
// 参数验证
if (empty($username) || empty($age)) {
// 参数不完整时的处理逻辑
$response = array(
'code' => 400,
'msg' => '用户名和年龄不能为空',
'data' => array()
);
// 后续返回JSON的代码
return;
}
if (!is_numeric($age) || $age < 0 || $age > 150) {
$response = array(
'code' => 400,
'msg' => '年龄必须是0到150之间的数字',
'data' => array()
);
// 后续返回JSON的代码
return;
}
// 参数验证通过,执行业务逻辑,比如查询数据库
// 这里模拟业务逻辑处理结果
$user_info = array(
'username' => $username,
'age' => $age,
'add_time' => date('Y-m-d H:i:s')
);
$response = array(
'code' => 200,
'msg' => '请求处理成功',
'data' => $user_info
);
// 后续返回JSON的代码
}
CodeIgniter返回JSON数据的技巧
处理完业务逻辑后,需要将结果以JSON格式返回给前端,CodeIgniter有多种方式可以实现这个功能。
技巧1:使用内置的output类设置响应头并返回
CodeIgniter的output类可以设置响应的内容类型和字符集,然后使用json_encode将数组转换为JSON字符串输出。
<?php
// 接上面的handle_ajax方法,替换之前的返回逻辑
public function handle_ajax() {
// 前面的参数验证和业务逻辑代码省略...
// 假设已经得到$response数组
$response = array(
'code' => 200,
'msg' => '请求处理成功',
'data' => $user_info
);
// 设置响应头为JSON格式,字符集为utf-8
$this->output
->set_content_type('application/json')
->set_output(json_encode($response, JSON_UNESCAPED_UNICODE));
// JSON_UNESCAPED_UNICODE参数可以让中文不被转义为unicode
}
技巧2:封装通用的JSON返回方法
如果多个控制器方法都需要返回JSON数据,可以封装一个通用的方法,减少重复代码,提升可维护性。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Base_controller extends CI_Controller {
public function __construct() {
parent::__construct();
}
/**
* 通用JSON返回方法
* @param int $code 状态码
* @param string $msg 提示信息
* @param array $data 返回数据
*/
protected function return_json($code = 200, $msg = '操作成功', $data = array()) {
$response = array(
'code' => $code,
'msg' => $msg,
'data' => $data
);
$this->output
->set_content_type('application/json')
->set_output(json_encode($response, JSON_UNESCAPED_UNICODE));
}
}
// 继承Base_controller的AJAX控制器
class Ajax_controller extends Base_controller {
public function __construct() {
parent::__construct();
}
public function handle_ajax() {
$username = $this->input->post('username', TRUE);
$age = $this->input->post('age', TRUE);
if (empty($username) || empty($age)) {
$this->return_json(400, '用户名和年龄不能为空');
return;
}
// 业务逻辑处理...
$user_info = array('username' => $username, 'age' => $age);
$this->return_json(200, '请求处理成功', $user_info);
}
}
技巧3:处理AJAX请求的跨域问题
如果前端和后端不在同一个域名下,会遇到跨域问题,可以在返回JSON的时候添加跨域响应头解决。
<?php
// 在返回JSON的方法中添加跨域头
protected function return_json($code = 200, $msg = '操作成功', $data = array()) {
$response = array(
'code' => $code,
'msg' => $msg,
'data' => $data
);
// 允许所有域名访问,实际开发中可以指定具体的域名
$this->output
->set_header('Access-Control-Allow-Origin: *')
->set_header('Access-Control-Allow-Methods: POST, GET, OPTIONS')
->set_header('Access-Control-Allow-Headers: Content-Type')
->set_content_type('application/json')
->set_output(json_encode($response, JSON_UNESCAPED_UNICODE));
}
前端AJAX请求示例
后端处理完成后,前端可以通过jQuery或者原生AJAX发送请求并接收返回的JSON数据,以下是jQuery的示例。
// 前端使用jQuery发送AJAX请求
$.ajax({
url: '/ajax_controller/handle_ajax', // 对应CodeIgniter的控制器方法URL
type: 'POST',
data: {
username: '张三',
age: 25
},
dataType: 'json',
success: function(res) {
if (res.code == 200) {
console.log('请求成功,返回数据:', res.data);
} else {
alert(res.msg);
}
},
error: function() {
alert('请求发送失败,请稍后重试');
}
});
注意事项
- 处理AJAX请求的控制器方法不要加载不必要的视图文件,避免输出多余的HTML内容影响JSON解析。
- 如果需要判断请求是否为AJAX请求,可以使用
$this->input->is_ajax_request()方法,该方法会判断请求头中是否包含AJAX标识。 - 返回JSON时尽量统一响应格式,比如都包含code、msg、data三个字段,方便前端统一处理。
- 敏感数据不要直接返回在JSON中,比如用户密码、数据库配置等信息。
<?php
// 判断是否为AJAX请求的示例
public function handle_ajax() {
// 如果不是AJAX请求,直接返回错误或者跳转
if (!$this->input->is_ajax_request()) {
$this->return_json(403, '非法请求');
return;
}
// 后续处理逻辑...
}
CodeIgniterAJAXJSONJSON数据返回修改时间:2026-06-13 20:30:45