var _exportExcel = function() { $.ajax({ type: "GET", url : "boQueryAction!queryOrderListExportInfo.action", data : {"g_paramInfo":JSON.stringify(g_paramInfo)}, cache : false, async : false, contentType:"application/json", error : function() { alert("导出失败"); } });
JS代码如上
后端代码没问题,
我已经response.setContentType("application/vnd.ms-excel;");
response.setHeader("Content-Disposition", "attachment;filename=" + templateName + ".xls");
都写好了,而且我断点看了,后台已经把HSSFWorkbook对象的EXCEL数据都准备好了
并且已经输出
//得到输出流
out = response.getOutputStream();
workBook.write(out);
//刷新输出流
但是点击导出按钮,不报错误,后台有查询数据的日志,也没有错.就是没有任何反应
所以想请教一下各位,前台ajax这种调用方式,是不是打不开EXCEL?
data : {"g_paramInfo":JSON.stringify(g_paramInfo)},
那就是你自己在页面里先创建一个FORM(用DIV隐藏起来),这个FORM里包含g_paramInfo文本域,具体值就是你的JSON.stringify(g_paramInfo),这个FORM的ACTION就是boQueryAction!queryOrderListExportInfo.action,
要下载时,就通过JQUERY把这个FORM提交上去,记得对这个FROM的TARGET设置成_blank,让他在新窗口打开
废话,文件流怎么能用ajax处理?不用那么麻烦的,直接打开boQueryAction!queryOrderListExportInfo.action就有下载提示了
你要用iframe提交请求,才能获取响应流
在浏览器安全范围内无法直接通过AJAX实现文件下载
你直接设置 location.href='boQueryAction!queryOrderListExportInfo.action';或者通过隐藏的iframe把下载地址赋值给src
[quote]问题补充:
suziwen 写道
在浏览器安全范围内无法直接通过AJAX实现文件下载
你直接设置 location.href='boQueryAction!queryOrderListExportInfo.action';或者通过隐藏的iframe把下载地址赋值给src
您好,不能直接打开这个action,我主要是还要传入这个json字符串
data : {"g_paramInfo":JSON.stringify(g_paramInfo)}, [/quote]
{"g_paramInfo":JSON.stringify(g_paramInfo)},这个提交时实际也是以健值方式提交的,可以直接拼成参数附加到
url后面"***.action?g_paramInfo="+JSON.stringify(g_paramInfo)
[quote]{"g_paramInfo":JSON.stringify(g_paramInfo)},这个提交时实际也是以健值方式提交的,可以直接拼成参数附加到
url后面"***.action?g_paramInfo="+JSON.stringify(g_paramInfo)[/quote]
直接拼成参数不是很好,有可能g_paramInfo里面的值是中文,再或者长度超出url地址最大长度时就不好使了
g_paramInfo如果值比较简单,是可以这样做的,也方便 :D
[quote]引用
{"g_paramInfo":JSON.stringify(g_paramInfo)},这个提交时实际也是以健值方式提交的,可以直接拼成参数附加到
url后面"***.action?g_paramInfo="+JSON.stringify(g_paramInfo)
直接拼成参数不是很好,有可能g_paramInfo里面的值是中文,再或者长度超出url地址最大长度时就不好使了[/quote]
[quote]g_paramInfo如果值比较简单,是可以这样做的,也方便 [/quote]
很对,视具体情况,也可以在iframe中提交信息的