12

我对 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,它不会下载文件。请指教。

4

3 回答 3

18

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

如果您想在点击时下载文件,那么您只需添加href到您的a标签即可。或使用文件的URL.

于 2012-10-18T13:02:47.110 回答
1

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

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

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

于 2012-10-18T13:04:04.607 回答
1

您不能直接从 AJAX 执行此操作,但您可以通过使用 iframe 启动下载来绕过它。有关讨论,请参阅Ajax 文件下载问题

于 2012-10-18T13:05:31.470 回答