首次使用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
相关产品推荐
相关产品推荐

