我对AJAX很新。我正在使用AJAX向服务器发送请求。该服务返回一个文本文件。但是返回数据时不会出现下载框。 返回文件的其余服务如下:
@Path("/examples")
public class ExampleCodesRest {
@POST
@Path("/getcode")
@Produces(MediaType.TEXT_PLAIN)
public Response getCodes(@Context ServletContext context){
String in=context.getRealPath("/WEB-INF/reports.jrxml");
File file=new File(in);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
"attachment; filename=\"file_from_server.log\"");
return response.build();
}
}
我的AJAX调用如下:
$('a#link').click(function(event){
event.preventDefault();
$.ajax({
url: '/reports/rest/examples/getcode',
type: 'POST'
});
});
没有AJAX,文件下载成功。 使用AJAX,它不会下载文件。请提供建议。
答案 0 :(得分:17)
建议很简单:你不能通过AJAX下载文件 - 这是一个安全策略。我的意思是你可以下载数据,但是你无法从JavaScript端将它保存到磁盘。
如果您想在点击时下载文件,则可以向href
标记添加a
。或者使用文件URL
打开一个新窗口。
答案 1 :(得分:1)
A)您没有回传接收数据的回复
b)向您的代码添加错误回调,以便在调用后查看是否有接收错误:
$.ajax({
url: '/spaconsole/rest/examples/getcode',
type: 'POST'
success: function (data) {
console.log('ok');
},
error: function (xhr) {
console.log(xhr);
}
});
编辑:如果要在页面中显示文本,则为此。如果你想下载文件,这不是办法,你不能使用ajax
答案 2 :(得分:1)
你不能直接从AJAX那里做到这一点,但你可以通过启动iframe来启动下载。有关讨论,请参阅Ajax File download Issue。