$.ajax({
type:'POST',
async:false,
url:'/export',
data:params,
dataType:'json',
...
success:function(jsonData){
//不执行success
window.location.href = '/export?index='+index; //第一种方式
window.open('/export?index='+index,'_self'); //第二种方式
},
error:function(error){
//总是执行这个error
}
});
一、jquery 1.4以后对json格式变严格了,也就是说必须要这种格式的{"键":"值","键":"值"};像原来的{键:值,键:值}和{'键':'值','键':'值'}这种都是错误的,不合标准,所以jquery返回error。
当dataType类型指定为json之后,要求比较严格,必须是标准的键值对格式,而后台并未做任何返回值,因此直接执行error.
二、ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件
使用window.location.href=dataUrl;就可以实现
Ajax直接调用后台的下载方法是导出不了文件的,原因是ajax无法接收后台的文件流