Layui 数据交互核心:轻松加载与使用 JSON 数据 **
在现代 Web 开发中,前后端数据交互是必不可少的环节,而 JSON(JavaScript Object Notation)以其轻量级、易读易写的特性,成为了前后端数据交换的主流格式,Layui 作为一款流行的前端 UI 框架,其许多组件(如表格、表单、下拉选择等)都需要与后端进行数据交互,如何正确地将 JSON 数据“加入”或“融入”到 Layui 组件中,就显得尤为重要,本文将详细讲解在 Layui 中处理 JSON 数据的常用方法和最佳实践。
准备工作:理解 Layui 与 JSON 的关系
在开始之前,我们需要明确一点:Layui 本身并不直接“生成”JSON 数据,JSON 数据通常由后端服务器提供(例如通过 AJAX 请求从 API 获取),Layui 的主要职责是接收、解析并渲染这些 JSON 数据,将其展示在页面上或利用其进行数据操作。
“加入 JSON”的核心步骤是:
- 获取 JSON 数据:通常使用
$.ajax或 Layui 封装的layui.use('table', function(table){...})等方式从后端获取。 - 处理 JSON 数据:根据 Layui 组件的要求,对获取到的 JSON 数据进行格式化或筛选。
- 渲染 JSON 数据:将处理后的 JSON 数据传递给 Layui 组件(如
table.reload(),form.val()等)进行展示和绑定。
常见场景:Layui 中加入 JSON 数据的几种方式
Layui Table 加载 JSON 数据(最常见)
Layui 的表格组件是展示 JSON 数据的利器,它要求后端返回的 JSON 数据格式通常为:
{
"code": 0,
"msg": "",
"count": 1000,
"data": [
{"id": 1, "username": "张三", "sex": "男", "city": "北京"},
{"id": 2, "username": "李四", "sex": "女", "city": "上海"},
{"id": 3, "username": "王五", "sex": "男", "city": "广州"}
]
}
实现步骤:
-
定义表格容器:
<table id="demo" lay-filter="demo"></table>
-
初始化表格并加载数据:
layui.use(['table'], function(){ var table = layui.table; //第一个实例 table.render({ elem: '#demo' ,url: '/api/getData' //此处为你的后端API接口,返回JSON数据 ,page: true //开启分页 ,cols: [[ //表头 {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'} ,{field: 'username', title: '用户名', width:120} ,{field: 'sex', title: '性别', width:80} ,{field: 'city', title: '城市', width:120} ,{title: '操作', width:150, align:'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器 ]] ,response: { statusCode: 200 //重新规定成功的状态码,默认:0 } ,parseData: function(res){ //res即为原始返回的数据 return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.count, //解析数据长度 "data": res.data //解析数据列表 }; } }); });url:指定获取 JSON 数据的后端接口。cols:定义表格列,field对应 JSON 数据中的键名。response和parseData:用于处理后端返回的 JSON 格式,使其符合 Layui Table 的要求,如果后端 JSON 格式完全符合 Layui 默认要求,可以省略这两项。
Layui Form 表单赋值(填充 JSON 数据)
当需要根据获取到的 JSON 数据动态填充表单时,可以使用 form.val() 方法。
实现步骤:
-
定义表单元素:
<form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-block"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">性别</label> <div class="layui-input-block"> <input type="radio" name="sex" value="男" title="男"> <input type="radio" name="sex" value="女" title="女"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-block"> <select name="city"> <option value="北京">北京</option> <option value="上海">上海</option> <option value="广州">广州</option> </select> </div> </div> </form> -
获取 JSON 数据并填充表单:
layui.use(['form', 'layer'], function(){ var form = layui.form; var layer = layui.layer; // 假设这是从后端获取到的 JSON 数据 var userData = { "username": "张三", "sex": "男", "city": "北京" }; // 使用 form.val() 方法为表单赋值 // 'formDemo' 是表单的 lay-filter 属性值,如果未设置,可以传 null 或表单的 DOM 对象 // userData 是要填充的 JSON 对象,其键名需要与表单元素的 name 属性对应 form.val('formDemo', userData); // 也可以直接通过 DOM 对象赋值(不推荐,不如 form.val 方便) // document.querySelector('input[name="username"]').value = userData.username; // document.querySelector('input[name="sex"][value="' + userData.sex + '"]').checked = true; // document.querySelector('select[name="city"]').value = userData.city; // form.render('select'); // 如果修改了 select 的值,需要重新渲染 });form.val(filter, object):object参数的键必须与表单元素的name属性一致。
Layui 下拉选择(Select)加载 JSON 数据
使用 form.render() 结合模板引擎或直接操作 option 来加载下拉框数据。
实现步骤(推荐使用模板引擎 layui.laytpl):
-
定义下拉框容器和模板:
<select name="citySelect" id="citySelect" lay-filter="citySelect"> <option value="">请选择城市</option> </select> <!-- 模板 --> <script type="text/html" id="cityTpl"> {{# layui.each(d, function(index, item){ }} <option value="{{ item.value }}">{{ item.name }}</option> {{# }); }} </script> -
获取 JSON 数据并渲染下拉框:
layui.use(['form', 'laytpl'], function(){ var form = layui.form; var laytpl = layui.laytpl; var $ = layui.jquery; // 假设这是从后端获取到的城市 JSON 数据 var cityData = [ {"value": "bj", "name": "北京"}, {"value": "sh", "name": "上海"}, {"value": "gz", "name": "广州"}, {"value": "sz", "name": "深圳"} ]; // 使用 laytpl 渲染模板 var getTpl = cityTpl.innerHTML; laytpl(getTpl).render(cityData, function(html){ $('#citySelect').html(html); // 将渲染好的 HTML 插入到下拉框中 form.render('select'); // 重新渲染下拉框,使其生效 }); // 也可以使用传统方式(数据量不大时) // var optionHtml = ''; // layui.each(cityData, function(index, item){ // optionHtml += '<option value="' + item.value + '">' + item.name + '</option>'; // }); // $('#citySelect').append(optionHtml); // form.render('select'); });



还没有评论,来说两句吧...