jquery+ajax+poi导不出EXCEL..

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中提交信息的