layui table利用ajax获取数据,不能正常加载数据

利用ajax正常返回数据以后,返回的data数据也有,也转换成了json,通过给layui.render 中给data属性赋值实现渲染数据,但就是不知道为什么layui数据表格中就是不渲染数据。

上代码,不上代码我分析不出来


layui.use(['form', 'jquery', 'layer'], function () {
                                                var form = layui.form;
                                                var $ = layui.$;
                                                var layer = layui.layer;
                                                // 通过点击事件获取。
                            $(function () {
                                $("#querybtn").click(function () {
                                    $.ajax({
                                        url: "Handler/HandlerDataInfo.ashx",
                                        async: true,
                                        data: arg,  
                                        timeout: 120000,
                                        type: "post",
                                        beforeSend: function () {  // 请求之前的方法
                                        },
                                        success: function (result) {
                                           // 其中result以字符串形式返回,通过该方法返回的数据Handler/HandlerDataInfo.ashx/ProcessRequest(HttpContext context)  并通过context.Response.ContentType = "text/plain";context.Response.Write(result);返回
                                                                      
                                            if (result != null && result != undefined) {
                                                window.parent.location = curWwwPath.substring(0, pos) + "/Login.aspx";
                                                return;
                                            }
                                            let data = result;
                                            console.log(result);
                                            console.log(data);
                                            datasplit = data.split('#'); 
                                            data = $.parseJSON("{\"code\":0,\"msg\":\"\",\"count\": " + parseInt(datasplit[0]) + ",\"data\": " + datasplit[3] + "}");
                                            data = eval(data);
                                            console.log(data);
                                            console.log(typeof (data.data[0].stationname));
                                            console.log(typeof (data.code));
                                            console.log(typeof (data.count));

                                            // ********在此之上都可以正常显示
                                            layui.use(['form', 'jquery', 'table', 'layer'], function () {
                                                var form = layui.form;
                                                var $ = layui.$;
                                                var table = layui.table;
                                                var layer = layui.layer;
                                                //第一个实例
                                                table.render({
                                                    elem: '#mytable'
                                                    , height: 312
                                                    , url: "Handler/HandlerDataInfo.ashx" //数据接口
                                                    , page: true //开启分页
                                                    //, limit: 10 //指定每页显示的条数
                                                    //, limits: [10, 20, 30, 40, 50] //每页条数的选择项
                                                    , dataType: 'json'
                                                    //, data:data
                                                    , cols:
                                                        [
                                                            [ //表头
                                                                { type: 'checkbox', width: 55 },
                                                                { field: 'id', title: '编号', width: 180 }
                                                                , { field: 'name', title: '名称', width: 200 }
                                                                , { field: 'position', title: '位置', width: 180 }
                                                                , { field: 'type', title: '类型', width: 130 }
                                                                , { field: 'status', title: '状态', width: 120 }
                                                                , { field: 'operate', title: '操作', width: 520 }
                                                            ]
                                                        ]
                                                    , praseData: function (data) {
                                                       // 此方法并未执行。
                                                        console.log(data);
                                                        datasplit = data.split('#');
                                                        return {
                                                            "code": 0,
                                                            "msg": "",
                                                            "count": parseInt(datasplit[0]),
                                                            "data": JSON.parse(datasplit[3])
                                                        };
                                                    }
                                                }

                                                );

                                            })
                                        },
                                        error: function () {
                                            console.log("失败");
                                        }
                                    });
                                })
                            });
                        });
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    在参考资料的第一部分代码中,你已经成功地将返回的数据转换成了JSON格式。接下来需要将这些数据渲染到layui的table中。

    根据你提供的参考资料段落0的代码,你使用了原生的JavaScript来操作DOM将数据渲染到页面上,这种方式有一定的复杂性并且容易出错。为了简化操作,你可以考虑使用Layui的table组件来实现数据的渲染。

    下面是一种使用Layui的table组件来渲染数据的方法:

    1. 首先,在HTML页面中引入Layui的相关文件。你可以通过CDN链接引入,也可以下载相关文件到本地并引入。
    <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.css">
    <script src="https://cdn.staticfile.org/layui/2.5.6/layui.js"></script>
    
    1. 在HTML页面中添加一个空的table元素,并为其添加一个id属性,用于后续的操作。
    <table id="demo" lay-filter="test"></table>
    
    1. 创建一个JavaScript函数,用于发送AJAX请求获取数据并渲染到table中。可以将该函数放在页面的script标签中,或者单独放在一个外部的js文件中。
    function loadData() {
      // 发送AJAX请求获取数据
      var xhr = new XMLHttpRequest();
      xhr.open('GET', "./demo.php", true);
      xhr.onload = function() {
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
          var data = xhr.responseText;
          var person = JSON.parse(data);
    
          // 使用Layui的table组件渲染数据
          layui.use('table', function() {
            var table = layui.table;
    
            // 渲染table
            table.render({
              elem: '#demo',  // 指定表格元素的id
              data: person,   // 将数据作为参数传入
              cols: [[
                {field: 'name', title: '姓名'},
                {field: 'age', title: '年龄'},
                {field: 'gender', title: '性别', templet: '#genderTpl'},  // 可以使用模板渲染特定的字段
              ]]
            });
          });
    
        } else {
          alert("Request was unsuccessful :" + xhr.status);
          console.log(xhr.statusText);
        }
      }
      xhr.send(null);
    }
    
    1. 在页面加载完成后调用loadData函数,即可实现数据的加载和渲染。
    window.onload = function() {
      loadData();
    }
    

    其中,在第3步中的cols属性是一个二维数组,可以定义表格的列数、列头和字段名称。你需要根据你的数据结构来定义具体的列。

    另外,你还可以使用模板来渲染特定的字段。在上面的例子中,我使用了一个模板来将性别字段的值转换成“男”或“女”。模板的定义方法是在HTML页面中添加一个script标签,并为其设置一个id属性,然后在cols数组中引用这个模板。

    <script type="text/html" id="genderTpl">
      {{# if(d.gender == 1){ }}
        
      {{# } else { }}
        
      {{# } }}
    </script>
    

    最后,你需要调用Layui的form.render()函数来渲染模板。

    layui.use('form', function() {
      var form = layui.form;
      form.render();
    });
    

    希望这个方法可以帮助到你解决问题。如果还有任何疑问,请随时询问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^