Ajax调用从RESTful服务返回的下载文件

我是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,它不会下载文件。请咨询。

建议很简单:你不能通过AJAX下载文件 – 这是一个安全策略。 我的意思是你可以下载数据,但你无法从JavaScript端将其保存到磁盘。

如果您想在点击时下载文件,那么您只需将href添加到标签即可。 或者使用文件的URL打开一个新窗口。

A)您没有回调接收数据
b)为您的代码添加错误回调,以便在调用后查看是否有接收错误:

  $.ajax({ url: '/spaconsole/rest/examples/getcode', type: 'POST' success: function (data) { console.log('ok'); }, error: function (xhr) { console.log(xhr); } }); 

编辑:这是您要在页面中显示文本。 如果你想下载文件,这不是办法,你不能使用ajax

你不能直接从AJAX那里做到这一点,但你可以通过启动iframe来启动下载。 有关讨论,请参阅Ajax文件下载问题 。