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.
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
.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With