最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Layui table渲染成功之后done回调函数用法
时间:2026-07-12 11:01:56 编辑:袖梨 来源:一聚教程网
done回调接收res、curr、count三个参数,其中res为完整响应体,curr为当前页码,count为总条数;DOM操作必须在done内执行,此时表格行已挂载;this指向table实例,可访问elem、reload等属性;超时或解析失败时done不触发,需用error或ajaxSetup处理。
done回调里能拿到什么参数
done函数接收三个参数:res、curr、count。其中res是服务器返回的完整响应体(不是res.data,而是整个 json 对象),curr是当前页码,count是总数据条数。注意:如果后端返回结构不符合 layui 默认约定(比如没包在data字段下),必须配合parsedata函数做转换,否则res里拿不到正确数据。
DOM 操作必须写在 done 里,不能放 render() 后面
表格行元素是异步插入的,table.render() 调用完立刻执行后续 JS,此时 .layui-table tbody tr 还不存在。常见错误是这样写:
table.render({ elem: '#demo', url: '/api/list' });document.querySelector('.layui-table tbody tr'); // ❌ 一定为空
正确做法是把所有 DOM 查询和修改逻辑全塞进 done 回调里:
-
done执行时,.layui-table-box tbody tr已真实挂载到页面 - 可安全使用
$(...).find(...)或原生document.querySelectorAll - 不要加
setTimeout(() => {}, 0)——done已是 DOM 就绪后的最早时机
done 中 this 指向 table 实例,能访问 elem 和 reload 方法
done 函数内部的 this 是当前 table 实例对象,不是 window。它有多个实用属性:
-
this.elem:指向初始化时传入的elem选择器对应 DOM 元素(如#demo) -
this.elem.next():常用来获取渲染后的包裹容器(含.layui-table-box) -
this.reload():可在 done 里触发重载(比如根据条件自动刷新) - 注意:不能直接用
tableIns.reload(),因为tableIns是 render 返回值,而 done 执行时可能还没赋值给变量
超时或失败时 done 不会触发,要靠 error 或全局 ajaxSetup 捕获
done 只在请求成功且数据解析无误时执行。网络超时、404、500 或 parseData 抛错都会跳过 done,直接走 error 流程。Layui 的 table.render 本身不暴露 timeout 配置项,得靠两种方式补救:
- 全局设置:
$.ajaxSetup({ timeout: 30000 }),所有 table 请求继承该超时 - 手动请求 + data 渲染:先用
$.ajax({ timeout: 30000 })拿数据,再传给table.render({ data: [...] }) - 别指望
done处理异常 —— 它只管“成功渲染后”,失败得另起炉灶
done 是“渲染完成”的通用钩子,其实它只响应“成功加载并解析数据”这一种路径;一旦接口卡住或格式不对,done 就静默失效,连 console.log 都不会执行。