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

CodeIgniter3 Ajax提交控制器问题:点击按钮无法更新数据库

排查通知标记已读功能的数据库更新问题

咱们一步步拆解问题,从代码细节里找原因:

1. 控制器核心变量未初始化,导致模型接收无效参数

你的控制器方法read_notif()里直接使用了$data['id'],但这个变量完全没有被定义或赋值!这会导致模型接收到的$id是null,WHERE recipient = $id的条件根本匹配不到任何数据,自然不会更新数据库。

你需要先获取当前登录用户的ID,比如从会话中读取(根据你项目的实际用户认证方式调整):

public function read_notif(){
    // 假设用CodeIgniter的session存储用户ID,替换成你项目的实际取值方式
    $user_id = $this->session->userdata('user_id');
    if($user_id){
        $this->profile_model->read_notifs($user_id);
    }
    return;
}

2. Ajax请求缺少调试反馈,无法确认请求状态

当前的Ajax代码没有任何成功/失败回调,你完全不知道请求是否真的到达了控制器、有没有报错。加上回调函数,用浏览器开发者工具就能快速定位问题:

$('#noti_Button').click(function (e) {
    e.preventDefault();
    $.ajax({
        url: '<?php echo site_url("profile/read_notif")?>',
        type: 'GET', // 若你的路由限制POST,可改为POST
        success: function(response) {
            console.log('请求成功,响应内容:', response);
            // 这里可以加UI反馈,比如更新通知小红点数量
        },
        error: function(xhr, status, error) {
            console.error('请求出错:', status, error);
            console.log('服务器返回详情:', xhr.responseText);
        }
    });
});

打开浏览器F12的「Console」和「Network」标签,就能看到请求的状态码、服务器返回的报错信息。

3. 模型可添加执行结果返回,方便验证更新效果

修改模型方法,返回受影响的行数,能直观确认是否有数据被更新:

function read_notifs($id) {
    if(empty($id)) return 0; // 先校验ID有效性
    $read = array(
        'read' => '1'
    );
    $this->db->where('recipient', $id);
    $this->db->update('tbl_notifications', $read);
    return $this->db->affected_rows(); // 返回更新的行数
}

然后控制器可以把结果返回给前端:

public function read_notif(){
    $user_id = $this->session->userdata('user_id');
    $affected_rows = 0;
    if($user_id){
        $affected_rows = $this->profile_model->read_notifs($user_id);
    }
    echo json_encode(array('updated_count' => $affected_rows));
    return;
}

这样前端的success回调里就能看到到底更新了几条数据。

4. 额外验证点

  • 路由与权限:直接在浏览器地址栏访问site_url("profile/read_notif")生成的URL,看是否能正常执行、有没有PHP报错(比如模型未加载、权限限制)。
  • 数据库数据匹配:手动执行SQL测试,确认存在符合条件的记录:
    UPDATE tbl_notifications SET `read` = '1' WHERE recipient = '你的测试用户ID';
    
    查看是否有行数被影响,排除数据本身不匹配的问题。

按以上步骤排查,应该就能快速定位并解决问题了!

内容的提问来源于stack exchange,提问作者geek_10101010

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:52