laravel中layui的table翻页不起作用问题的解决
本地测试是好的,部署的时候就发现,翻页不起作用了。但lay_num序号是可以变化的,查看api接口传递的数据,发现数据没有变化,加上page=2等翻页,也是不起作用,看来是url参数返回给后台,后台读取不了数据。
感谢这个文章:laravel 路由在nginx不生效解决(宝塔面板)_laravel nginx路由无法访问-CSDN博客
原因就是Nginx服务没有传递参数,配置如下:
location / {root /www/wwwroot/xxx/public;index index.php index.html index.htm default.php default.htm default.html;# try_files $uri $uri/ $uri.php /index.php;try_files $uri $uri/ /index.php?$query_string; #开启路由访问,laravel项目改为此条}
就是要加上?$query_string这个url变量,传递参数值,否则Nginx服务就不转发get方法参数了。post方法不受影响。
这样laravel后端输出的api就非常简单:
public function users(){return User::paginate(10);}
就连request参数也不需要了,如果要自定义翻页,就需要自己计算offset:
public function users(Request $request)
{$curr_page = $request->input("page", 1);$limit = $request->input("limit", 10);$count = User::count();$offset = ($curr_page - 1) * $limit;// 确保 offset 不为负数if ($offset < 0) {$offset = 0;}$users = User::offset($offset)->limit($limit)->get()->toArray();return response(['code' => 0,'msg' => '','count' => $count,'data' => $users]);
}
如果没有传递code=0这个layui的table必须自带的参数,table就会接收不到数据,需要在table的options里添加一下:
, parseData: function(res) {// console.log(res);// var result;// if (this.page.curr) {// result = res.data.slice(this.limit * (this.page.curr - 1), this.limit * this.page.curr);// } else {// result = res.data.slice(0, this.limit);// }return {"code": 0// , "msg": res.msg, "count": res.total, "data": res.data};}
闹了半天,原来是Nginx服务器的配置问题。本地测试是正常的,部署到服务器就翻页出问题,翻不了页,应该想到是服务器配置的问题了……