layui 渲染表格无法设置ajax请求头问题

layui 渲染表格无法设置ajax请求头问题
前情提要:
  • 相信很多朋友对 layui 都有一定了解,作为后台管理模板使用的前端框架算是一个比较新,也比较受欢迎的框架
  • 公司最近一个项目也在使用Layui,再渲染表格时,发现比较坑的一点,layui渲染表格的几种方式,均无法设置请求头!这可坑死人了。
  • 很多公司为了提升系统安全性,基本都会使用auth2.0,不带token基本就不用玩了。无法设置请求头,还带毛线token啊?
言归正传:

上网查询了很多,layui 渲染表格设置请求头的问题,回答最多的就是改源码!
layui渲染表格的几种方式,其实都是使用内部封装的ajax请求,去获取数据然后渲染的。
比如下面这种方式:

var table = layui.table
            ,form = layui.form;
    layui.use('table', function () {  // 引入 table模块
        table.render({
            id:"dataTable",//
            elem: '#layui_table_id',//指定表格元素
            url: '/menu/menuList.ajax',  //请求路径
            cellMinWidth: 20 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
            ,skin: 'line ' //表格风格 line (行边框风格)row (列边框风格)nob (无边框风格)
           //,even: true    //隔行换色
            ,page: true  //开启分页
            ,limits: [10,20,50]  //每页条数的选择项,默认:[10,20,30,40,50,60,70,80,90]。
            ,limit: 10 //每页默认显示的数量
            ,method:'post'  //提交方式
           ,cols: [[
                {type:'checkbox'}, //开启多选框
                {
                    field: 'menuId', //json对应的key
                    title: 'ID',   //列名
                    sort: true   // 默认为 false,true为开启排序
                }
            ]]
        });
    });    

只有一个url,也没有属性可以设置请求头!

如何解决:
  • 首先 自己封装一个ajax模块
// 定义模块
layui.define(['jquery','myWindow','auth'], function (exports) {
    var $ = layui.jquery;
    var myWindow = layui.myWindow;
    var auth = layui.auth;
    var layer = layui.layer;
    var myAjax = {
    	// 登录,获取token,设置token
        login:function (data,callback) {
            $.ajax({
                type:"post",
                async:true,
                url:projectPath+"/auth",
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                data:data,
                success:function (response) {
                    if(response.code == SUCCESS_STATUS){
                        //设置token
                        auth.setToken(response.data);
                        //调整页面
                        myWindow.redirectToIndex();
                    }else{
                        callback(response);
                    }
                }
            })
        },
        // token有效时间内 刷新
        refresh:function () {
            $.ajax({
                type:"post",
                async:true,
                headers: {
                    Authorization: auth.getToken()
                },
                url:projectPath+"/refresh",
                dataType: "json",
                success:function (response) {
                    if(response.code == SUCCESS_STATUS){
                        //设置token
                        auth.setToken(response.data);
                    }else{//刷新token出错
                        myWindow.redirectToLogin();
                    }
                }
            })
        },
       	// 封装ajax
        ajax:function (uri,async,data,callback) {
            $.ajax({
                type:"post",
                headers: {// 设置头部
                    Authorization: auth.getToken()
                },
                async:async,
                url:projectPath+uri,
                dataType: "json",
                data:data,
                success:function (response) {
                    if(response.code == REDIRECT_STATUS){
                        myWindow.redirectToLogin();
                        //myWindow.openInCurrentPage(response.data);
                    }else{
                        callback(response);// 回调函数
                    }
                }
            })
         }
    };

    exports('myAjax', myAjax);
});  
  • 使用js方式渲染表格
// 引入layui.js这里省略了,你们要自己引入,就在这里引入
<script>
							var tableData;
                            layui.use(['element','myAjax','laypage','layer'], function(){
                                var laypage = layui.laypage
                                    ,layer = layui.layer;

                                var myAjax = layui.myAjax;//使用自己封装的ajax,只要登陆了,内部就已经设置好了请求头,直接使用模块就行了
                                var $ = layui.jquery;
                                var element = layui.element();
                                var data;
                                //加载菜单
                                myAjax.ajax("/invoice/list",false,null,renderTable);// 发送带有请求头的ajax,获取表格数据
                                //加载完成 初始化
                                element.init();

                                // 渲染数据表格
                                function renderTable(response) {
                                    data = response.data;
                                    console.log(data.length);
                                }
                                // 分页
                                var nums = 5; //每页出现的数据量
                                //模拟渲染
                                var render = function(data, curr){//这里按照你们的需要进行渲染就行,data是你们拿到的list数据
                                    var showTable = "";
									var thisData = data.concat().splice(curr*nums-nums, nums);

                                    for (var i = 0;i<thisData.length;i++){
                                        var usedStatus = "已开具";
                                        var id = thisData[i].id;
                                        var status = thisData[i].status;
                                        var table = "<thead>"+
                                                "<td class='hidden-xs'>"+thisData[i].id+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].orderId+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].orderFee+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].companyName+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].companyEin+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].email+"</td>"+
                                                "<td class='hidden-xs'>"+thisData[i].createTime+"</td>";
												if (thisData[i].status == usedStatus) {
												    console.log(thisData[i].status+"状态为已开具")
                                                    table += "<td class='hidden-xs'><button class='layui-btn layui-btn-mini layui-btn-danger layui-btn-radius' style='background-color: #FF5722'>"+thisData[i].status+"</button></td>";
												}else{
                                                    table += "<td class='hidden-xs'><button class='layui-btn layui-btn-mini layui-btn-radius'>"+thisData[i].status+"</button></td>";
												}
                                        	table +="<td class='hidden-xs'><button class='layui-btn layui-btn-mini layui-btn-radius' onclick='invoice(&quot;"+ id + "&quot;,&quot;"+ status + "&quot;);'>开票</button></td>";
                                        showTable+=table;
                                    }
                                    return showTable;
                                };

分页在下一篇回讲到
下面是效果
在这里插入图片描述

  • 到这里带请求头的ajax获取数据,渲染表格就写完了
  • 这种方式 不能使用layui的自动分页,需要使用自定义分页
    留着下次写了,有问题的可在下方评论~
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好,关于 layui 数据表格的请求传参,一般可以通过以下两种方式实现: 1. 在前端页面的 JS 代码中,使用 Ajax 请求获取数据,并将请求参数作为数据传递到后台接口,后台接口根据参数进行数据查询和处理,并返回结果给前端页面进行显示。 2. 在 layui 数据表格的配置项中,配置接口 URL 和请求参数,当数据表格需要获取数据时,会自动向后台接口发送请求,并将请求参数作为参数传递到后台接口,后台接口根据参数进行数据查询和处理,并返回结果给 layui 数据表格进行显示。 对于第一种方式,可以参考以下代码: ```javascript // 前端 JS 代码 layui.use('table', function(){ var table = layui.table; // 监听搜索按钮的点击事件 $('#searchBtn').click(function(){ // 获取搜索框的值 var keyword = $('#keyword').val(); // 发送 Ajax 请求获取数据 $.ajax({ url: '/api/tableData', type: 'GET', data: { keyword: keyword }, success: function(res){ // 将数据绑定到 layui 数据表格table.render({ elem: '#data-table', data: res.data // 其他配置项 }); } }); }); }); // 后台接口代码 app.get('/api/tableData', function(req, res){ // 获取请求参数 var keyword = req.query.keyword; // 根据参数查询数据 var data = getDataByKeyword(keyword); // 返回数据给前端页面 res.json({ code: 0, msg: '', data: data }); }); ``` 对于第二种方式,可以参考以下代码: ```javascript // 前端 JS 代码 layui.use('table', function(){ var table = layui.table; // 渲染 layui 数据表格 table.render({ elem: '#data-table', url: '/api/tableData', where: { keyword: '' } // 其他配置项 }); // 监听搜索按钮的点击事件 $('#searchBtn').click(function(){ // 获取搜索框的值 var keyword = $('#keyword').val(); // 设置请求参数 table.reload('data-table', { where: { keyword: keyword } }); }); }); // 后台接口代码 app.get('/api/tableData', function(req, res){ // 获取请求参数 var keyword = req.query.keyword; // 根据参数查询数据 var data = getDataByKeyword(keyword); // 返回数据给 layui 数据表格 res.json({ code: 0, msg: '', count: data.length, data: data }); }); ``` 以上代码仅供参考,具体实现方式可以根据项目需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值