急,原生form表单下载excal如何监听过程及各种情况,提前感谢大佬们

1.因某些环境原因,后台无法给文件下载地址,以及无法使用blob下载二进制流,ajax模拟form提交无法直接下载excal

2.现在下载使用浏览器的form表单去下载excal文件,
触发下载按钮执行下面的代码, 请求form后,会有后台查询数据的过程,数据量大了就有十几秒,查询完浏览器才会弹出下载框,我前台如何监听到form后台的查询过程,毕竟不是ajax会有返回结果,如何给用户页面加loading之类的效果,或者如何监听用户点击另存为 取消另存为等操作?

3.感谢大佬们能看到这里,希望能帮助下我。

export default function(options){
    return new Promise((resolve, reject)=>{
        let dlform = document.createElement('form');
        dlform.style = "display:none;";
        dlform.method = options.method;
        dlform.action = options.url;
        // dlform.target = '_blank';   打开新页面会是action的地址,我更操作不了,无法加loading之类的。

    let token = document.createElement('input');
        token.type = 'hidden';
        token.name = 'x-access-token';
        token.value = tool.getSession('TKid');
        dlform.appendChild(token);

        for(let index in options.data){
            let hdnFilePath = document.createElement('input');
                hdnFilePath.type = 'hidden';
                hdnFilePath.name = index;
                hdnFilePath.value = options.data[index];
                dlform.appendChild(hdnFilePath);
        }

        document.body.appendChild(dlform);
        dlform.submit();
        document.body.removeChild(dlform);
        resolve('下载')
    })
    
}    
阅读 2.4k
1 个回答

Promise
之前直接开启loading状态
resolve
后关闭loading

监控用户点击另存为不是
oncontextmenu吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题