为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我前台用的是jquery ajax调用,但是它的回调函数是把servlet响应的内容得到了?

为什么我前台用的是jquery ajax调用,但是它的回调函数是把servlet响应的内容得到了?

翻阅古今 2022-03-03 09:05:01
怎么让这个内容被浏览器解析?各位老大请帮个忙public void downLoad(String filePath, HttpServletResponse response,) throws Exception{File f = new File(filePath);if (!f.exists()){response.sendError(404, "File not found!");return;}BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));byte[] buf = new byte[1024];int len = 0;response.reset();response.setContentType("application/x-msdownload");response.addHeader("Content-Disposition", "attachment; filename="+ new String(f.getName().getBytes("GBK"), "ISO8859-1"));OutputStream out = response.getOutputStream();while ((len = br.read(buf)) > 0){out.write(buf, 0, len);}br.close();out.flush();out.close();}
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

1、既然是文件下载就不要用Ajax请求,最好用JS直接打开地址的方法来响应JS事件。
2、其次你的Servlet代码里面要设置正确的ContentType和Content-Disposition的attachment header。

查看完整回答
反对 回复 2022-03-07
?
HUWWW

TA贡献1874条经验 获得超12个赞

在ajax的回调函数里,用类似这样的代码:
alert(ajax.responseText);
或者:
var show = document.createElement('div');
show.innerHTML = ajax.responseText;
document.body.appendChild(show);
这样就把内容显示到页面中了。
如果是把ajax的东西下载到本地:
如果是给特定用户使用的,可以考虑用IE的new ActiveObject函数调用本地的自动化控件。如果是给一般的浏览器用,是无法写入到本地的。基本上上你要浏览器下载东西,要么是a标签一类的,要么是你更改location,这个是要刷新页面的。
总之你ajax得到的东西,没有通用的方法可以保存成本地文件,最多借助一些RIA的东西。



查看完整回答
反对 回复 2022-03-07
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信