最近做一个上传下载项目,客户非要实现批量下载,于是实现了压缩之后下载,然后客户又提出,不压缩可以不可以,个人理解应该不难实现,结果纠结近一天的时间,web应用都是一个请求一个响应,所以只有想办法在浏览器重复发起请求,但是在js中for循环提交怎么也实现不了。只有最后一次提交是响应。大家有没有比较好的方法。
$("#submitsend").click(function () {
for (i=0;i<strs.length-1;i++ ) 
{
alert(strs[i]);
$("#idnums").val(strs[i]);
 $("#sendform").attr("action","/download.action");
 $("#sendform").submit();

}
核心代码如上,点击批量下载按钮,根据选中的id 到后台获取数据并下载。

解决方案 »

  1.   

    <form> 标签设置为 target="_blank"
      

  2.   

    我这里是下载,不是上传。而且用ajax 不行,因为ajax 不支持返回io流
      

  3.   

    你不要用for循环,
    用setTimeout()定时每隔一定的时间发一次请求。(还是要设置 target="_blank"的)
      

  4.   

    keyi 利用本地存储技术,比如localStorage cookie等 来记录下来你需要上传的文件路径数据,然后提交完一个后再读取一个再提交。直到读取完成。或者你可以把提交表达的数据放到一个iframe中去,用iframe提交,直到所有的循环完成
      

  5.   

    定时器应该可以,没测试。分别创建多个iframe也可以。        document.querySelector('button').addEventListener('click',()=>{
                for(let i = 10;i--;){
                    let iframe = document.createElement('iframe')
                    input.value = i.toString()
                    iframe.name = 'name' + i
                    document.body.appendChild(iframe)
                    form.target = 'name' + i
                    form.submit()
                }
            },false)好处是不需要弹出多个tab。iframe设置成隐藏,还可添加加载完自动删除它。