本人前端知识相当于小白,初学SSM时,了解了layui前端框架,所以开始研究了数据表的增删改查,由于js、ajax知识不是很好,所以百度了相关ajax操作,用以借鉴。希望能帮助有需要的初学者,不喜勿喷,另外有相关不足,希望大家可以指出,谢谢!
注: 以下前端代码都是利用layui的框架,后台是SSM
前端:
<%-- Created by IntelliJ IDEA. User: SL Date: 2019/2/26 Time: 14:03 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="utf-8"> <meta content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <title>layui在线调试</title> <link href="${ctx}/static/layui/css/layui.css?t=1545041465443" media="all"> <script src="https://www.jb51.net/${ctx}/static/jquery/jquery-3.3.1.js"></script> <style> body { margin: 10px; } .demo-carousel { height: 200px; line-height: 200px; text-align: center; } </style> </head> <body> <table lay-filter="test"></table> <script type="text/html"> <a lay-event="detail">查看</a> <a lay-event="edit">编辑</a> <a lay-event="del">删除</a> </script> <script src="${ctx}/static/layui/layui.js?t=1545041465443" charset="utf-8"></script> <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 --> <script> layui.config({ version: '1545041465443' //为了更新 js 缓存,可忽略 }); layui.use(['layer', 'table', 'element'], function () { var layer = layui.layer //弹层 , table = layui.table //表格 , element = layui.element //元素操作 , form = layui.form //监听Tab切换 element.on('tab(demo)', function (data) { layer.tips('切换了 ' + data.index + ':' + this.innerHTML, this, { tips: 1 }); }); //执行一个 table 实例 table.render({ elem: '#demo' , height: 420 , url: '${ctx}/news/main/' //数据接口 , title: '新闻表' , page: true //开启分页 , toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档 , totalRow: true //开启合计行 , cols: [[ //表头 {type: 'checkbox', fixed: 'left'} , {field: 'id', title: '新闻编号', width: 30, sort: true, fixed: 'left'} , {field: 'title', title: '新闻名称', width: 180} , {field: 'summary', title: '新闻摘要', width: 180} , {field: 'author', title: '作者', width: 70} , {field: 'createDate', title: '创建时间', width: 100} , {fixed: 'right', width: 165, align: 'center', toolbar: '#barDemo'} ]] }); //监听头工具栏事件 table.on('toolbar(test)', function (obj) { var checkStatus = table.checkStatus(obj.config.id) , data = checkStatus.data; //获取选中的数据 switch (obj.event) { case 'add': /*layer.msg('添加');*/ layer.open({ //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层) type: 1, title: "添加新闻信息", area: ['420px', '330px'], content: $("#popAddTest")//引用的弹出层的页面层的方式加载修改界面表单 }); //动态向表传递赋值可以参看文章进行修改界面的更新前数据的显示,当然也是异步请求的要数据的修改数据的获取 /*setFormValue(obj,data);*/ form.on('submit(submit12)', function (massage) { $.ajax({ url: '${ctx}/news/add/', type: 'POST', dataType: 'json', contentType: "application/json; charset=utf-8", data: JSON.stringify({ /*id: JSON.stringify(data.id),*/ id: data.id, newtitle: massage.field.newtitle, newsummary: massage.field.newsummary, newauthor: massage.field.newauthor }), success: function (msg) { var returnCode = msg.returnCode;//取得返回数据(Sting类型的字符串)的信息进行取值判断 if (returnCode == 200) { layer.closeAll('loading'); layer.load(2); layer.msg("添加成功", {icon: 6}); setTimeout(function () { location.reload();//刷新页面 /* layer.closeAll();//关闭所有的弹出层*/ }, 1000 ); //加载层-风格 } else { layer.msg("添加失败", {icon: 5}); } } }) return false;//false:阻止表单跳转 true:表单跳转 }) break; case 'update': if (data.length === 0) { layer.msg('请选择一行'); } else if (data.length > 1) { layer.msg('只能同时编辑一个'); } else { layer.alert('编辑 [id]:' + checkStatus.data[0].id); } break; case 'delete': /*批量删除*/ if (data.length === 0) { layer.msg('请选择需要删除的数据'); } else { /*layer.msg('删除');*/ /* var checkStatus = table.checkStatus('demo');*/ var ids = ""; for(var i=0;i<data.length;i++){ ids += data[i].id+","; } alert(ids); parent.layer.msg('删除中...', {icon: 16,shade: 0.3,time:2000}); $.ajax({ url: '${ctx}/news/mulDelete/', type: 'POST', dataType: 'json', contentType: "application/json; charset=utf-8", data: JSON.stringify({ /*id: JSON.stringify(data.id),*/ ids: ids }), success: function (msg) { var returnCode = msg.returnCode;//取得返回数据(Sting类型的字符串)的信息进行取值判断 if (returnCode == 200) { layer.closeAll('loading'); layer.load(2); layer.msg("删除成功", {icon: 6}); setTimeout(function () { location.reload();//刷新页面 /* layer.closeAll();//关闭所有的弹出层*/ }, 1000 ); //加载层-风格 } else { layer.msg("删除失败", {icon: 5}); } } }) return false;//false:阻止表单跳转 true:表单跳转 } break; } ; }); //监听行工具事件 table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值" var data = obj.data //获得当前行数据 , layEvent = obj.event; //获得 lay-event 对应的值 if (layEvent === 'detail') { layer.msg('查看操作'); } else if (layEvent === 'del') { /*layer.confirm('真的删除行么', function(index){ obj.del(); //删除对应行(tr)的DOM结构 layer.close(index); //向服务端发送删除指令 });*/ layer.confirm('真的删除行么', function (index) { obj.del(); //删除对应行(tr)的DOM结构 layer.close(index); //向服务端发送删除指令 $.ajax({ url: '${ctx}/news/delete/' , type: 'POST' , data: "{\"id\":\"" + data.id + "\"}" , dataType: 'json' , contentType: "application/json; charset=utf-8" , success: function (msg) { var returnCode = msg.returnCode;//取得返回数据(Sting类型的字符串)的信息进行取值判断 if (returnCode == 200) { layer.closeAll('loading'); layer.load(2); layer.msg("删除成功", {icon: 6}); setTimeout(function () { location.reload();//刷新页面 /* layer.closeAll();//关闭所有的弹出层*/ }, 1000 ); //加载层-风格 } else { layer.msg("删除失败", {icon: 5}); } } }); return false; }); } else if (layEvent === 'edit') { /* layer.prompt({ formType: 2 ,value: data.summary }, function(value, index){ obj.update({ summary: value }); layer.close(index); });*/ $("#newtitle").val(data.title); $("#newsummary").val(data.summary); $("#newauthor").val(data.author); layer.open({ //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层) type: 1, title: "修改新闻信息", area: ['420px', '330px'], content: $("#popUpdateTest")//引用的弹出层的页面层的方式加载修改界面表单 }); //动态向表传递赋值可以参看文章进行修改界面的更新前数据的显示,当然也是异步请求的要数据的修改数据的获取 /*setFormValue(obj,data);*/ form.on('submit(submit11)', function (massage) { $.ajax({ url: '${ctx}/news/update/', type: 'POST', dataType: 'json', contentType: "application/json; charset=utf-8", data: JSON.stringify({ /*id: JSON.stringify(data.id),*/ id: data.id, newtitle: massage.field.newtitle, newsummary: massage.field.newsummary, newauthor: massage.field.newauthor }), success: function (msg) { var returnCode = msg.returnCode;//取得返回数据(Sting类型的字符串)的信息进行取值判断 if (returnCode == 200) { layer.closeAll('loading'); layer.load(2); layer.msg("修改成功", {icon: 6}); setTimeout(function () { obj.update({ title: massage.field.newtitle, summary: massage.field.newsummary, author: massage.field.newauthor });//修改成功修改表格数据不进行跳转 location.reload();//刷新页面 /* layer.closeAll();//关闭所有的弹出层*/ }, 1000 ); //加载层-风格 } else { layer.msg("修改失败", {icon: 5}); } } }) return false;//false:阻止表单跳转 true:表单跳转 }) } }); }); </script> <%--这里是弹出层表单(修改)--%> <div> <div> <form action="" method=""> <div><label>新闻标题</label> <div><input type="text" autocomplete="off" placeholder="请输入新闻标题"> </div> </div> <div><label>新闻摘要</label> <div><input type="text" autocomplete="off" placeholder="请输入新闻编号"> </div> </div> <div><label>作者</label> <div><input type="text" autocomplete="off" placeholder="请输入作者"> </div> </div> <div> <div> <button lay-submit="" lay-filter="submit11">确认修改</button> <button type="reset">重置</button> </div> </div> </form> </div> </div> <%--这里是弹出层表单(添加)--%> <div> <div> <form action="" method=""> <div><label>新闻标题</label> <div><input type="text" autocomplete="off" placeholder="请输入新闻标题"> </div> </div> <div><label>新闻摘要</label> <div><input type="text" autocomplete="off" placeholder="请输入新闻编号"> </div> </div> <div><label>作者</label> <div><input type="text" autocomplete="off" placeholder="请输入作者"> </div> </div> <div> <div> <button lay-submit="" lay-filter="submit12">确认添加</button> <button type="reset">重置</button> </div> </div> </form> </div> </div> </body> </html>
后台: