美文网首页
若依-$.modal.loading("正在导出数据,请稍后..

若依-$.modal.loading("正在导出数据,请稍后..

作者: 秋元_92a3 | 来源:发表于2020-05-03 14:30 被阅读0次

实现需求

我在写一个上传附件的js程序,由于上传的文件可能会比较大,所以上传之后可能会出现较长时间的等待,为了避免误导消费者,这里决定,上传附件期间,搞个弹出层,让用户知道当前系统的状态是处理中。

官方文档

提供遮罩层信息

$.modal.loading("正在导出数据,请稍后...");
$.modal.closeLoading();

实现

根据官方提供的接口,我的ajax的提交向后端的代码如下:

const formData = new FormData();
      formData.append("docUrl", document.getElementById("doc").files[0]);
      formData.append("articleRegion", $("input[name='articleRegion']:checked").val());
      formData.append("available", $("input[name='available']:checked").val());
      formData.append("pdfFlag", 1);
      formData.append("categoryId", $("input[name='categoryId']").val());
      formData.append("articleModel", $("input[name='articleModel']:checked").val());
      formData.append("title", $("input[name='title']").val());
      formData.append("isCopy", $("input[name='isCopy']").val());
      formData.append("copyFlag", $("input[name='copyFlag']").val());
      formData.append("keywords", $("input[name='keywords']").val());
      formData.append("coverImage", $("input[name='coverImage']").val());
      formData.append("tags", tagIds);
      formData.append("commentFlag", $("input[name='commentFlag']").val());
      formData.append("description", $("#description").val());
      $.ajax({
        cache: true,
        type: "POST",
        dataType: "json",
        url: ctx + "cms/document/add",
        data: formData,
        async: false,
        processData: false,     //用于对data参数进行序列化处理 这里必须false
        contentType: false,     //必须
        beforeSend: function () {
          $.modal.loading("数据上传中,请稍后...");
        },
        error: function (request) {
          $.modal.alertError("系统错误");
        },
        success: function (data) {
          $.operate.successCallback(data);
        }
      });

我的想法是,当调用这段代码,ajax提交之后,弹出浮框,提示:数据上传中;当时当程序运行之后,效果并没有达到,看现象,当ajax整个程序执行完成之后,浮框会一闪而过,也就是说,弹出浮框的程序没有问题,但是他出现的时机有问题。

修正

通过查看源码,发现官方提供的这个弹出浮框的程序,底层调用的方法是blockUI,从名称上也可以知道,这个方法是阻塞的,这样的话,就想到ajax这个方法配置的同步/异步会不会对相关产生影响,于是将这个参数asyn设置成true,也就是让ajax异步的方式调用,再看效果,发现效果实现了。
修改之后的代码如下:

const formData = new FormData();
      formData.append("docUrl", document.getElementById("doc").files[0]);
      formData.append("articleRegion", $("input[name='articleRegion']:checked").val());
      formData.append("available", $("input[name='available']:checked").val());
      formData.append("pdfFlag", 1);
      formData.append("categoryId", $("input[name='categoryId']").val());
      formData.append("articleModel", $("input[name='articleModel']:checked").val());
      formData.append("title", $("input[name='title']").val());
      formData.append("isCopy", $("input[name='isCopy']").val());
      formData.append("copyFlag", $("input[name='copyFlag']").val());
      formData.append("keywords", $("input[name='keywords']").val());
      formData.append("coverImage", $("input[name='coverImage']").val());
      formData.append("tags", tagIds);
      formData.append("commentFlag", $("input[name='commentFlag']").val());
      formData.append("description", $("#description").val());
      $.ajax({
        cache: true,
        type: "POST",
        dataType: "json",
        url: ctx + "cms/document/add",
        data: formData,
        async: true,
        processData: false,     //用于对data参数进行序列化处理 这里必须false
        contentType: false,     //必须
        beforeSend: function () {
          $.modal.loading("数据上传中,请稍后...");
        },
        error: function (request) {
          $.modal.alertError("系统错误");
        },
        success: function (data) {
          $.operate.successCallback(data);
        }
      });

相关文章

网友评论

      本文标题:若依-$.modal.loading("正在导出数据,请稍后..

      本文链接:https://www.haomeiwen.com/subject/thpdghtx.html