thinkphp后端对接layui需返回标准json结构:code=0、msg=''、count=$list->total()、data=$list->items(),且url参数名(page/size)必须与input()接收名严格一致,否则翻页失效。

直接对接的关键是:后端必须返回 code/msg/count/data 四字段 JSON,且 URL 参数名(page 和 size)要和 ThinkPHP 的 input('page')、input('size') 完全一致,否则翻页永远只查第一页。
ThinkPHP 后端怎么构造 Layui 要的 JSON 结构
不能用 $list->render() 或 $list->toArray(),它们返回的是带元信息的对象或嵌套数组,Layui 会解析失败。必须手动拼装标准结构:
-
code必须为整数0(非 0 表示错误,Layui 表格会报错停渲染) -
count必须调$list->total(),不是count($list)——后者只返回当前页条数 -
data必须用$list->items(),不是$list->all()——后者含current_page等字段,会污染数据数组 -
msg可为空字符串,但字段不能缺
示例(TP 6/8 均适用):
$data = [ 'code' => 0, 'msg' => '', 'count' => $list->total(), 'data' => $list->items() ]; return json($data);
Layui 前端 laypage.render() 的 URL 和参数怎么配
URL 中的参数名必须和后端 input() 接收名严格对齐,最常见错误就是写成 limit 而后端却用 input('size'),导致 size 拿不到值,默认为 1,每页只显示 1 条。
- URL 必须含问号,如
/api/user?page={{page}}&size={{limit}};写成/api/user?page={{page}}&limit={{limit}}就会失效 -
limits数组写数值,如[10, 20, 50],别写['10', '20'],否则 TP 的input('size/d')会转成 0 -
elem值不带#,写'pagination',不是'#pagination',否则报Cannot read property 'innerHTML' of null - 必须加
jump回调,并用if (!first)过滤首次自动触发,否则第一页加载两次
示例:
laypage.render({
elem: 'pagination',
url: '/api/user?page={{page}}&size={{limit}}',
count: 1234,
limit: 10,
curr: 1,
jump: function(obj, first) {
if (!first) {
axios.get(obj.url).then(res => {
document.getElementById('list').innerHTML = template(res.data.data);
});
}
}
});
为什么表格(table.render)翻页后 data is not defined
根本原因是后端返回的 JSON 结构不合规,或前端没做字段映射。Layui 表格默认期望后端返回 data 是顶层字段,但 TP 默认分页对象里 data 在子层(比如 res.data.list),直接传会找不到。
- 首选方案:后端按标准结构返回,前端加
parseData显式提取,哪怕只是透传 -
parseData必须返回含code/msg/count/data的对象,不能少字段 - 若后端已返回标准结构,就别写
parseData;写了又没返回data,就会报data is not defined - 注意
page: true必须开启,否则url中的{{page}}占位符不生效
正确 parseData 示例:
table.render({
elem: '#demo',
url: '/api/user',
page: true,
parseData: function(res) {
return {
code: res.code,
msg: res.msg,
count: res.count,
data: res.data
};
}
});
最容易被忽略的一点:TP 后端分页逻辑里,paginate(10) 的 10 是默认值,实际每页条数必须由 input('size/d', 10) 动态取,否则切换每页 20 条时,SQL 仍用 LIMIT 10,前端显示空数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











