This is the approach I'd now recommend with a few caveats:
This is flippin brilliant. There are numerous questions on StackOverflow concerning how to trigger a file download via a POST request, and all of the answers say it's impossible, and that it must be done by setting the window URL. Link Downloading jQuery Compressed and uncompressed copies of jQuery files are available. The uncompressed file is best used during development or debugging; the compressed file saves bandwidth and improves performance in production. You can also download a sourcemap file for use when debugging with a compressed file. In such cases, (when we need to use AJAX to make a HTTP POST and then download a file), the solution is to use a 2 pronged approach, where we would first make the HTTP Post request, and in the controller action we would store the File content in a Memory stream. JQuery File Download is a cross server platform compatible jQuery plugin that allows for an Ajax-like file download experience that isn’t normally possible using the web. Demo of jquery.fileDownload.js in action with some different examples Example VS2010 MVC 3 application using jquery.fileDownload.js GitHub – Send me a pull request! Download the compressed, production jQuery Migrate 1.4.1. Download the uncompressed, development jQuery Migrate 1.4.1. The second version helps you update code to run on jQuery 3.0 or higher, once you have used Migrate 1.x and upgraded to jQuery 1.9 or higher: Download the compressed, production jQuery Migrate 3.1.0. Hi, I am starting with ajax and got a problem with a download I would like to make via AJAX. $( document ).ready(function console.log('jQuery Version Download a file via AJAX - jQuery Forum.
- A relatively modern browser is required
- If the file is expected to be very large you should likely do something similar to the original approach (iframe and cookie) because some of the below operations could likely consume system memory at least as large as the file being downloaded and/or other interesting CPU side effects.
Example of the above code in action: https://codesandbox.io/s/fetch-based-file-download-0kxod
jQuery File Download is a cross server platform compatible jQuery plugin that allows for an Ajax-like file download experience that isn't normally possible using the web.
Jquery Post Response Download File
Demo (of this exact source):
Source here:
Targeting pretty modern browser(s)?
This might be a better solution to your problem https://github.com/eligrey/FileSaver.js/
Requirements
- jQuery 1.6+
Common questions and answers
- Q: I need to send in custom headers. How do I do that?
- Unfortunately since this plugin uses an iframe and not AJAX you cannot send in custom headers. If you really need to do this and are willing to accept a more narrow range of browser support this might be a better solution to your problem https://github.com/eligrey/FileSaver.js/
- Q: It doesn't work!?
- Try out the demo and make sure you are doing exactly what it is doing: http://jqueryfiledownload.apphb.com/ If the demo doesn't work in your browser you have defintely found a bug and us know!
- Due to iframe security restrictions you must serve up the file from the same domain you see in the address bar
![Jquery Post Download File Jquery Post Download File](/uploads/1/2/4/9/124910019/121959428.png)
Supported and tested browsers
- Internet Explorer 6+ - Works fine for standard use cases except in < IE9 JavaScript access to the failed response HTML doesn't (and can't) work reliably due to browser iframe constraints.
- Firefox 11+ - reasonably sure it will work on earlier versions
- Chrome 17+ - reasonably sure it will work on earlier versions
- iOS 5.0+ - reasonably sure it will work on earlier versions
- Android 4.0+ - non-GET requests do not work due to a long-standing bug in the Android browser. This is handled 'gracefully' with a message to the user.
More details here:http://johnculviner.com/post/2012/03/22/Ajax-like-feature-rich-file-downloads-with-jQuery-File-Download.aspx
Example of writing cookie (MVC):
https://github.com/johnculviner/jquery.fileDownload/blob/master/src/Common/FileDownloadAttribute.cs
The above attribute can be used on any controller action that may return a file download that you would like to use jquery.fileDownload.js with
The above attribute can be used on any controller action that may return a file download that you would like to use jquery.fileDownload.js with
For more information and documentation please visit:
Or look at the well documented JavaScript source:
Ruby on Rails integration
The
jquery_file_download-rails
gem integrates jquery.fileDownload.js
into the Rails 3.1+ asset pipeline.