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

首次使用jquery.tabledit.js+CodeIgniter:如何传递行数据到控制器?

解决CodeIgniter结合jquery.tabledit.js传递数据到控制器的问题

嘿,我刚帮好几个开发者搞定过这个场景,你的问题大概率是没抓准Tabledit的AJAX提交逻辑,或者忽略了CodeIgniter的CSRF防护!下面一步步给你梳理:

第一步:正确配置Tabledit的JS参数

Tabledit本身是通过AJAX把编辑/删除数据提交到后端的,核心是把url指向你的CodeIgniter控制器方法,同时配置好字段映射,还要带上CI要求的CSRF令牌(这是很多人踩坑的点!)

给你一个完整的JS配置示例:

$(document).ready(function() {
  $('.uptade-table').Tabledit({
    // 指向你的控制器处理方法,用base_url生成绝对路径
    url: '<?= base_url("your_controller/handle_table_updates") ?>',
    // 配置字段映射:identifier是唯一标识列(这里是id列,索引0),editable是可编辑列
    columns: {
      identifier: [0, 'id'], // 第一列(<th>id</th>)对应后端接收的'id'参数
      editable: [
        [1, 'price'], // 第二列对应'price'参数
        [2, 'total']  // 第三列对应'total'参数
      ]
    },
    // 自定义提交数据,必须带上CSRF令牌,否则CI会拦截请求
    onSubmit: function(data) {
      data['<?= $this->security->get_csrf_token_name() ?>'] = '<?= $this->security->get_csrf_hash() ?>';
      return data;
    },
    // 可选:操作成功后的提示
    success: function(data) {
      console.log('操作成功:', data);
    }
  });
});

第二步:编写控制器接收数据的方法

在你的CodeIgniter控制器里,创建一个方法来接收Tabledit提交的POST数据,处理编辑/删除逻辑,最后返回JSON响应(Tabledit需要这个来确认操作状态)

示例控制器代码:

class Your_controller extends CI_Controller {
  public function __construct() {
    parent::__construct();
    // 加载需要的model(如果有的话)
    $this->load->model('your_data_model');
    // 确保AJAX请求才能访问这个方法(可选)
    if (!$this->input->is_ajax_request()) {
      show_404();
    }
  }

  public function handle_table_updates() {
    // 验证CSRF令牌(CI默认开启,这里可以手动确认)
    $this->security->csrf_verify();

    // 获取Tabledit提交的核心参数
    $action = $this->input->post('action'); // 操作类型:edit/delete
    $row_id = $this->input->post('id');     // 要操作的行ID
    $price = $this->input->post('price');   // 编辑后的price值
    $total = $this->input->post('total');   // 编辑后的total值

    // 根据操作类型处理逻辑
    switch($action) {
      case 'edit':
        // 调用model更新数据库,示例:
        $update_result = $this->your_data_model->update_row($row_id, [
          'price' => $price,
          'total' => $total
        ]);
        // 返回JSON响应
        echo json_encode([
          'success' => $update_result,
          'message' => $update_result ? '更新成功' : '更新失败'
        ]);
        break;

      case 'delete':
        // 如果开启了删除功能,处理删除逻辑
        $delete_result = $this->your_data_model->delete_row($row_id);
        echo json_encode([
          'success' => $delete_result,
          'message' => $delete_result ? '删除成功' : '删除失败'
        ]);
        break;

      default:
        echo json_encode(['success' => false, 'message' => '无效的操作类型']);
        break;
    }
  }
}

关键注意事项

  • CSRF令牌必须带:CodeIgniter默认开启CSRF防护,如果AJAX请求不带令牌,会直接返回403错误,这是新手最容易忽略的点!
  • 字段名要对应:JS里editable配置的第二个参数(比如'price'),必须和控制器$this->input->post('price')的键一致。
  • 返回JSON格式:Tabledit依赖后端返回的JSON来判断操作是否成功,所以一定要用echo json_encode(...)返回,不要输出其他HTML内容。
  • 路由确认:确保你的控制器方法路由正确,用base_url()生成的路径可以直接访问(比如在浏览器里输入这个URL测试,看是否返回正确响应)。

如果之前的方法没生效,大概率是以上某一点没做到,你可以先检查CSRF令牌是否正确传递,再看控制器是否能接收到POST参数~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:33:20