• JS ajax 动态删除表格行


    CMS经常遇到这样的操作:将一个表格的某行数据删除,之前公司的CMS系统一直采用的是在一行中增加一列用来链接到另外一个地址,并传入该行的标示列,在另外页面中进行删除,删除成功后返回列表页。

    这样可以实现效果,但是有一下两个弊端:

    1:增加了数据库服务器查询的次数。即在删除成功后返回列表页后,因为实际上是重新打开了列表页,列表页在加载时又进行了一次对数据库的查询。而这次查询是毫无意义的。

    2:用户体验不友好。点击一次删除,则刷新了一次页面。

    今天小猪就使用了Ajax 和js来实现页面无刷新删除数据。

    大体思路是:js获取需要删除数据的标识Id,然后通过ajax传入后台,后台进行对数据库数据的删除,成功则返回正确提示。ajax收到正确提示后把该行数据从表格中删除。整个过程中没有进行页面的刷新。

    首先:在对应的行的列中行样式 remove方便查找该列jQuery对象。

    <td class="delete remove">
           <a href="javascript:" url="Delete" name="@news.Id">[ X ]</a>
    </td>

    html代码中,小猪增加了两个属性,分别是:url、name。是为了在后面的js代码中获取该列的数据对象。

    js代码如下:

    $(".remove").live("click", function (e) {
    //每个remove的都会绑定其点击事件
        var thisE = $(e.currentTarget).parent();//获取该行对象
        var ID = $(e.currentTarget).children("a").attr("name");//获取id属性
        var data = { id: ID };
        var beforesend = function(){
            console.log("before sending!");//ajax之前执行操作
        }
        var success = function (data) {//ajax执行成功的函数
                thisE.fadeOut();//页面中该行隐藏
        }
       
        core.AJAX(data, action, beforesend, success)//ajax提交
    })

    此时配合对应的后台就可以实现了对该行数据的删除。但是数据库中的数据是需要在后台进行删除操作的。

    所以小猪对上述代码进行了优化:即在后台返回了数据为success的时候才在页面中删除对应行。

    $(".remove").live("click", function (e) {
     
        var thisE = $(e.currentTarget).parent();
        var ID = $(e.currentTarget).children("a").attr("name");
     
        var data = { id: ID };
        console.log("clicking!" + ID + ";url:" + action);
     
        var beforesend = function(){
            console.log("before sending!");
        }
     
        var success = function (data) {
            if (data == "success") {
                //只有后台返回的数据是success时候页面才删除
                thisE.fadeOut();
            } else if (data == "error") {
                //后台返回的是其他信息则不删除
                console.log("some error!");
            } else {
                console.log("unknow exception!");
            }
        }
        core.AJAX(data, action, beforesend, success)
    })

    此时完成了先是从数据库中删除数据,删除成功后告诉前台,然后前台把对应行从表格中fadeOut。

    可是上述代码的ajax代码只能提交到html所在页的地址,如果一行内有多种操作(彻底删除、移到回收站等),那上述代码就不够了。所以小猪在一开始就在html代码中预留了一个action属性,指示数据要提交的地址。另外,小猪总觉得还是少了点什么,后来才知道是应该给用户一个提示,形如给出个提示:操作成功了。

    于是第三版代码出炉了

    $(".remove").live("click", function (e) {
     
        var thisE = $(e.currentTarget).parent();
        var ID = $(e.currentTarget).children("a").attr("name");
        var url = $(e.currentTarget).children("a").attr("url");
        var action = url == undefined ? "" : url;//提交地址
     
        var data = { id: ID };
        console.log("clicking!" + ID + ";url:" + action);
     
        var beforesend = function(){
            console.log("before sending!");
        }
     
        var alerttips = function (data) {
            $("#tips").css({ "display": "block", "opacity": "1" });
            $("#tips").animate({ opacity: 0 });
            $("#tips").html(data);
        }
        var success = function (data) {
            if (data == "success") {
                alerttips("操作成功!")//提示用户操作成功
                thisE.fadeOut();
            } else if (data == "error") {
                console.log("some error!");
            } else {
                console.log("unknow exception!");
            }
        }
        core.AJAX(data, action, beforesend, success)
    })

    自此,功能就差不多了。小猪也开开心心的认为又跨进了前端大门一步。

    后来才又发现了另外的bug,就是在用户点击对应的remove之后,该行会有一个消失的过程,如果用户在消失的过程中重复点击删除。。那还是会有问题的。。。。

    虽然是一个小的功能,但是需要考虑的东西真是多呀。。。。

  • 相关阅读:
    CentOS 7 最小化安装建议安装包
    何为“精通Java”
    初识设计模式、软件设计的六大原则
    Git——常用场景解析
    元素水平或垂直居中问题
    书写静态页面的那些事儿。。。
    Position定位相关知识了解
    溢出处理、盒子模型、背景图片、float(浮动)
    CSS颜色、单位、文本样式
    CSS样式表及选择器相关内容(二)-伪类与伪元素选择器
  • 原文地址:https://www.cnblogs.com/smallerpig/p/3646118.html
Copyright © 2020-2023  润新知