You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 3 Ajax更新无响应求助:数据可打印但更新报错

问题分析与修复方案

核心问题点

  1. 控制器参数接收不匹配:update_akses方法试图从URL参数获取$id和$akses_lihat,但Ajax是通过POST请求体传递数据,两者逻辑冲突。
  2. 未返回JSON响应:Ajax明确指定dataType: 'JSON',但控制器仅返回查询执行结果,未输出符合格式要求的JSON数据,导致前端无响应。
  3. 潜在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:29:56