Codeigniter 3 Ajax更新无响应求助:数据可打印但更新报错
问题分析与修复方案
核心问题点
- 控制器参数接收不匹配:
update_akses方法试图从URL参数获取$id和$akses_lihat,但Ajax是通过POST请求体传递数据,两者逻辑冲突。 - 未返回JSON响应:Ajax明确指定
dataType: 'JSON',但控制器仅返回查询执行结果,未输出符合格式要求的JSON数据,导致前端无响应。 - 潜在CSRF拦截问题:Codeigniter3默认启用CSRF保护,POST请求未携带CSRF令牌会被框架拦截。
修复步骤
1. 修改控制器方法,正确接收参数并返回JSON
public function update_akses() { // 接收POST传递的参数 $id = $this->input->post('id'); $akses_lihat = $this->input->post('akses_lihat'); // 执行更新操作 $updateResult = $this->db->where('id', $id)->update('data_users_akses', ['akses_lihat' => $akses_lihat]); // 返回标准JSON响应 echo json_encode([ 'success' => $updateResult, 'message' => $updateResult ? '权限更新成功' : '权限更新失败' ]); exit; // 终止后续输出,避免多余内容破坏JSON格式 }
2. 调整Ajax请求,兼容CSRF保护
如果你的Codeigniter3开启了CSRF保护(默认开启),需在请求数据中加入CSRF令牌:
var id = $('#id').val(); var akses_lihat = $('#akses_lihat').val(); $.ajax({ url: '<?php echo base_url('User_Akses/update_akses') ?>', method: 'POST', dataType: 'JSON', data: { id: id, akses_lihat: akses_lihat, // 追加CSRF令牌参数 '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash(); ?>' }, success: function(res) { // 处理响应结果 console.log(res); alert(res.message); }, error: function(xhr) { // 调试用:打印错误详情 console.log(xhr.responseText); } });
3. 调试技巧
- 打开浏览器开发者工具(F12),查看Network标签页,检查请求状态、参数是否正确传递、响应内容是否符合预期。
- 若更新失败,可在控制器中添加
echo $this->db->last_query();,查看生成的SQL语句是否存在语法错误。
内容的提问来源于stack exchange,提问作者Rizky Giapratama
相关产品推荐
相关产品推荐

