b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

干货分析:前后端是否导出完成的对象js代码ExportDownloadTimer

电脑杂谈  发布时间:2021-05-08 00:04:30  来源:网络整理

我最近在工作中遇到问题。导出和添加进度条本来可以说是一件很简单的事情,但是必须出现文件下载的弹出框,也就是说,它是完全同步的。有很多方法可以找出以下方法是否有效。

干货分析

js代码`

导出请求方法ExportDownloadTimer是前端和后端的对象,用于监视导出是否完成

            var params = {};//参数需要往后台传递的参数信息
            $.ajax({
                type: "POST",
                url: url,//导出的触发文件路径
                data: params,//绑定参数
                success: function (response, status, request) {
                    params.DownParams = DownParams;//下载的参数在这个参数主要在后端中记录cookie信息
                    var disp = request.getResponseHeader(Content-Disposition);
                    if (disp && disp.search(attachment) != -1) {  //判断是否为文件
                        var form = $(
); $.each(params, function (k, v) { form.append($()); }); $(body).append(form); form.submit(); //自动提交 ExportDownloadTimer.Count = 0; ExportDownloadTimer.MaxCount = 7200; ExportDownloadTimer.KeyId = DownParams.split(|)[0]; ExportDownloadTimer.KeyValue = DownParams.split(|)[1]; ExportDownloadTimer.Cache = setInterval(ExportDownloadTimer.CheckToken, 500); } } });

js代码

jsp导入excel文件_jsp导入excel带进度条_eclipse导入jsp文件

ExportDownloadTimer方法

Count和MaxCount用于解决无限循环,这可能会限制整个过程等待的最大值。

var ExportDownloadTimer = {
    Cache: null,//记录缓存方式
    Count: 0,//走到的位置 当前允许的次数
    MaxCount: 0,//最大执行次数
    KeyId: "",//的名称
    KeyValue: "",//对比值
    CheckToken: function () {
        //前端实时监测时间戳和后台设置的cookie值是否相等,相等就说明文件下载成功,就可以关闭提示框
        var token = ExportDownloadTimer.GetCookie(ExportDownloadTimer.KeyId);
        ExportDownloadTimer.Count++;
        if ((token && token == ExportDownloadTimer.KeyValue) ||
            ExportDownloadTimer.MaxCount < ExportDownloadTimer.Count) {
            clearTimeout(ExportDownloadTimer.Cache);
            ExportDownloadTimer.Cache = null,
            ExportDownloadTimer.Count = 0;
            ExportDownloadTimer.MaxCount = 0;
            ExportDownloadTimer.KeyId = "";
            ExportDownloadTimer.KeyValue = "";
         //这个地方记录进度条关闭方法
        }
    },
    //导出所用的方式处理
    GetCookie: function (cookieName) {
        var strCookie = document.cookie;
        var arrCookie = strCookie.split("; ");
        for (var i = 0; i < arrCookie.length; i++) {
            var arr = arrCookie[i].split("=");
            if (cookieName == arr[0]) {
                return arr[1];
            }
        }
        return "";
    }
}

C#代码

侦听信息DownParams是前端传递的参数,必须与前端信息保持一致才能实现监控效果

                if (!string.IsNullOrEmpty(DownParams) && DownParams.Split(|).Length == 2 && !string.IsNullOrEmpty(DownParams.Split(|)[0]) && !string.IsNullOrEmpty(DownParams.Split(|)[1]))
                {
                    HttpRequest request = HttpContext.Current.Request;
                    HttpResponse response = HttpContext.Current.Response;
                    if (request != null && request.Cookies[DownParams.Split(|)[0]] != null)//先删除
                    {
                        response.Cookies.Remove(DownParams.Split(|)[0]);
                    }
                    Guard.IsNotNullOrEmpty(DownParams.Split(|)[0], "cookieName");
                    HttpCookie cookie = new HttpCookie(DownParams.Split(|)[0]);
                    cookie.Expires = DateTime.Now.AddMinutes(10);
                    cookie.Value = DownParams.Split(|)[1];
                    cookie.Path = "/"; //指定统一的Path,比便能通存通取    //设置跨域,这样在其它二级域名下就都可以访问到了 
                    response.AppendCookie(cookie);
                }


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-373807-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...