使用ajax-datatable-rails,单次Ajax调用更新DataTable与Div并获取全量ID
正确实现方案
要实现单次Ajax调用同时更新DataTable和指定Div,且获取所有查询结果的ID(而非当前页数据),需要从后端配合和前端配置两方面调整:
1. 后端修改核心要求
在DataTables的serverSide模式下,前端默认仅能获取当前分页的数据。因此必须让后端在返回DataTables标准响应结构时,额外添加一个自定义字段(比如all_people_ids),包含所有符合查询条件的ID列表。
后端返回的JSON结构示例:
{ "draw": 1, "recordsTotal": 100, "recordsFiltered": 50, "data": [/* 当前页的人员数据 */], "all_people_ids": [1, 3, 5, ..., 49] // 所有匹配查询条件的ID }
2. 前端正确配置
推荐使用DataTables的xhr.dt事件处理Ajax响应,该事件会在每次Ajax请求完成后触发,DataTables会自动完成表格渲染,你只需专注于Div的更新逻辑:
# 初始化DataTable datatable = $('#people-datatable').dataTable processing: true order: [] serverSide: true ajax: $('#people-datatable').data('source') # 监听Ajax请求完成事件 datatable.on 'xhr.dt', (e, settings, json) -> # 检查后端是否返回了全量ID字段 if json.all_people_ids? # 更新目标Div内容 $("#bouba").html(json.all_people_ids.join(','))
原有代码失败原因
- 第一段代码:
success回调被错误嵌套在data函数内部,DataTables无法识别该回调位置,因此不会触发。 - 第二段代码:重复发起同步Ajax请求,违背了单次调用的需求,还会阻塞页面;同时错误手动设置
recordsTotal(该字段应由后端返回)。
内容的提问来源于stack exchange,提问作者Rene Chan
相关产品推荐
相关产品推荐

