DataTables增删改查(二)

这篇文章主要记录针对表格的常用操作,增删改查。涉及的内容包括需要的文件、如何定义操作按钮、一些控件如何交互

插件链接

Benefits

  • 针对普通需求,不需要写编辑页面,插件自动生成
  • 自动适配的表格的风格,是页面看起来比较舒服

Requirements

完整的代码

  • 先贴上完整的代码,之后会解释一些问题,想明白这些问题,回头再看这一大段代码,也就释然了。
    var editor = new $.fn.dataTable.Editor({
        //汉化,设置标题
        i18n : {
            error: {
                system: ""
            },
            create : {
                title : "增加角色",
                submit : "增加"
            },
            edit : {
                title : "修改角色",
                submit : "修改"
            }
        },
        ajax : function(method, url, data, success, error) {
            // 新增
            if (data.action == "create") {
                var param = {};
                //data包括了选中某行的数据,由于数据格式有问题,这里重新获取
                for ( var i in data.data) {
                    param = data.data[i];
                }
                var jsonData = postAjax(param,"/api/hm/auth/role/create", false);
                // 查询成功,拼接表格参数
                if (jsonData.status == 100) {
                    var tableObject = {};
                    //编辑表格需要这一列,可以不展示,但一定要有
                    param.DT_RowId = table.data().length + 1;
                    tableObject.data = [];
                    tableObject.data[0] = param;
                    success(tableObject);
                } else {
                    error();
                }
            } else {
                //修改
                var param = {};
                for ( var i in data.data) {
                    param = data.data[i];
                    param.action = data.action;
                    param.DT_RowId = i;
                }
                var authorizeId = "";
                var jsonData = postAjax(param,"/api/hm/auth/role/update", false);
                // 查询成功,拼接表格参数
                if (jsonData.status == 100) {
                    var tableObject = {};
                    tableObject.data = [];
                    tableObject.data[0] = param;
                    success(tableObject);
                } else {
                    error();
                }
            }
        },
        table : "#userManageTable",
        //模态窗口设置,后面的样式是添加必填项
        fields : [ {
            label : "角色<span style='color: #f00;size: 4px'>*</span>",
            name : "player"
        }, {
            label : "权限<span style='color: #f00;size: 4px'>*</span>",
            name : "authorize",
            type : "checkbox",
            options : moduleTitle
        }, {
            type : "select",
            label : "状态",
            name : "state",
            options : [ '正常', '禁用', ]
        } ],
    });
    //初始化时开启/关闭对某一列的修改
    editor.on('onInitEdit', function() {
        editor.disable('player');
    });
    editor.on('onInitCreate', function() {
        editor.enable('player');
    });

关联表格

  • 如何与某个表格关联
  • 需要两个操作,第一是在dataTable属性里面,设置buttons属性,另外一个是在editor对象里面,设置table属性,需要注意的是,表格初始化对象,一些属性需要按照约定来设置,比如dom字段,需要设置为Bfrtip,比如data字段,每一行需要DT_RowId这个字段,用于唯一表示某一行
buttons : [ {
            extend : "create",
            editor : editor,
            text : '创建'
        }, {
            extend : "edit",
            editor : editor,
            text : '修改'
        }
table : "#userManageTable",

与服务器交互

  • 如何将数据发送给服务器,直接在方法内部使用ajax同步请求即可
  • 获取服务器数据后,如何刷新表格,如何给出错误提示
  • 如上代码,实际上,回调函数提供了success和error两个方法,请求后台数据成功后,按照约定的数据格式,将数据塞进success方法中,以下是数据格式及方法
var tableObject = {
data:[{action:"create",data:{},DT_RowId:12
},]
}
success(tableObject);
效果图
  • 最后放两张实际效果图
    这里写图片描述
    编辑按钮组
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 dataTables 实现增删改查并与后端交互的示例代码: HTML: ```html <!DOCTYPE html> <html> <head> <title>DataTables Example</title> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.min.css"> <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js"></script> </head> <body> <h1>DataTables Example</h1> <table id="example" class="display" style="width:100%"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> <th>Gender</th> <th>Action</th> </tr> </thead> <tbody> </tbody> </table> <br> <button id="addButton">Add</button> </body> <script type="text/javascript"> var dataTable; $(document).ready(function() { dataTable = $('#example').DataTable({ "ajax": "backend.php?action=get", "columns": [ { "data": "id" }, { "data": "name" }, { "data": "age" }, { "data": "gender" }, { "defaultContent": "<button>Edit</button><button>Delete</button>" } ] }); $('#addButton').click(function() { addData(); }); $('#example tbody').on('click', 'button', function() { var data = dataTable.row($(this).parents('tr')).data(); if ($(this).text() == "Edit") { editData(data); } else { deleteData(data); } }); }); function addData() { var name = prompt("Name:"); var age = prompt("Age:"); var gender = prompt("Gender:"); $.ajax({ url: "backend.php", type: "POST", data: { action: "add", name: name, age: age, gender: gender }, success: function(result) { dataTable.ajax.reload(null, false); } }); } function editData(data) { var name = prompt("Name:", data.name); var age = prompt("Age:", data.age); var gender = prompt("Gender:", data.gender); $.ajax({ url: "backend.php", type: "POST", data: { action: "edit", id: data.id, name: name, age: age, gender: gender }, success: function(result) { dataTable.ajax.reload(null, false); } }); } function deleteData(data) { if (confirm("Are you sure to delete?")) { $.ajax({ url: "backend.php", type: "POST", data: { action: "delete", id: data.id }, success: function(result) { dataTable.ajax.reload(null, false); } }); } } </script> </html> ``` backend.php: ```php <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $action = $_POST["action"]; if ($action == "add") { $name = $_POST["name"]; $age = $_POST["age"]; $gender = $_POST["gender"]; $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('" . $name . "', '" . $age . "', '" . $gender . "')"; $conn->query($sql); } else if ($action == "edit") { $id = $_POST["id"]; $name = $_POST["name"]; $age = $_POST["age"]; $gender = $_POST["gender"]; $sql = "UPDATE MyGuests SET firstname='" . $name . "', lastname='" . $age . "', email='" . $gender . "' WHERE id=" . $id; $conn->query($sql); } else if ($action == "delete") { $id = $_POST["id"]; $sql = "DELETE FROM MyGuests WHERE id=" . $id; $conn->query($sql); } else if ($action == "get") { $sql = "SELECT * FROM MyGuests"; $result = $conn->query($sql); $data = array(); while ($row = $result->fetch_assoc()) { $data[] = $row; } echo json_encode(array("data" => $data)); } $conn->close(); ?> ``` 注意:上面的代码仅供参考,需要根据具体情况进行修改。同时,需要在后端进行安全验证和防止 SQL 注入等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值