Ajax call to download file returned from RESTful s

2019-01-12 08:54发布

I am fairly new to AJAX. I am sending a request to server using AJAX. The service returns a text file. But no download box appears when data is returned. The rest service that returns the file is as follows:

@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();

    }
}

My AJAX call is as follows:

 $('a#link').click(function(event){
    event.preventDefault();
    $.ajax({
        url: '/reports/rest/examples/getcode',
        type: 'POST'
    });
}); 

The file downloads successful without AJAX. With AJAX, it doesn't download the file.Please advice.

标签: jquery ajax rest
3条回答
淡お忘
2楼-- · 2019-01-12 09:27

A) you don't have a callback to receive data back
b) Add error callback to you code so you can see if there are receiving errors after the call:

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

Edit: This is if you want to display the text in page. If you want to download the file, this is not the way, you cannot use ajax

查看更多
姐就是有狂的资本
3楼-- · 2019-01-12 09:28

You can't do that directly from AJAX, but you can get around it by having an iframe that initiates the download. See Ajax File download Issue for a discussion.

查看更多
太酷不给撩
4楼-- · 2019-01-12 09:32

Advice is simple: you cannot download files via AJAX - it's a security policy. I mean you can download the data, but you can't save it to disk from JavaScript side.

If you want to download a file on click, then you can just add href to you a tag. Or open a new window with file's URL.

查看更多
登录 后发表回答