前端:ajax调用导出数据到excel方法,方法有执行但没有下载

后端进行数据查询,返回处理结果到excel,前端使用的是ajax。

最开始的写法是:ajax的url里填写接口路径,结果代码能正常运行,但页面始终没有弹出下载框

原因:ajax是无法直接导出excel的,因为ajax的返回值只能是字符流,而导出excel是后台往浏览器中写入二进制的字节流

方法一、form表单(推荐)

<a href="javascript:void(0)" onclick="exportExcel()">导出</a>
 
function exportExcel(){
     var form = $("<form>");
     form.attr('style', 'display:none');
     form.attr('target', '');
     form.attr('method', 'post');
     form.attr('action', '接口url');
 
     var input1 = $('<input>');
     input1.attr('type', 'hidden');
     input1.attr('name', '参数');
     input1.attr('value', '参数值');      /* JSON.stringify($.serializeObject($('#searchForm'))) */
 
     $('body').append(form);
     form.append(input1);
      
     form.submit();
     form.remove();   
}

方法二、window.location.href()

function() {
    window.location.href = "接口url?参数1=xxx&参数2=aaa";
}

方法三、ajax请求把参数缓存在后端返回给前端,前端ajax再次发起一个window.open(url?params=params)即可 

$.ajax({
url: '接口url',
type: 'post',
dataType: "json",
contentType : 'application/json',
data : JSON.stringify(this.tableOpts),
success: function(data){
    window.open('接口url?params=xxxx');
}
});

注意,使用window.open()或是window.location.href()时有个前端传值限制,超过限制数会报错。

Microsoft Internet Explorer (Browser):IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。

Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符

Safari (Browser):URL最大长度限制为 80,000个字符。

Opera (Browser):URL最大长度限制为190,000个字符。

Google (chrome):url最大长度限制为8182个字符

关于window.location和window.open()的区别,后者下载的时候会打开一个新的窗口,下载文件成功时,窗口关闭,一般下载够快的话,是看不到窗口的!但是前者下载是不会打开新的窗口,建议使用前者! 

猜你喜欢

转载自blog.csdn.net/weixin_38676276/article/details/107646212