Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

download file using an ajax request

I want to send an "ajax download request" when I click on a button, so I tried in this way:

javascript:

var xhr = new XMLHttpRequest(); xhr.open("GET", "download.php"); xhr.send(); 

download.php:

<? header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename= file.txt"); header("Content-Transfer-Encoding: binary");     readfile("file.txt"); ?> 

but doesn't work as expected, how can I do ? Thank you in advance

like image 526
Manuel Di Iorio Avatar asked Dec 29 '13 21:12

Manuel Di Iorio


People also ask

Can I download file using AJAX?

Clicking the download button will call the DownloadFileJavaScript function. Within the DownloadFile JavaScript function, the URL of the file is passed as a parameter to the jQuery AJAX function.

How do I export a CSV file from AJAX?

ajax({ url: 'exportCSV. php', type: 'post', dataType: 'html', data: { Year: $('input[name="exportYear"]'). val() }, success: function(data) { var result = data console. log(result); } }); });

What does AJAX GET request do?

GET is basically used for just getting (retrieving) some data from the server. Note: The GET method may return cached data. POST can also be used to get some data from the server. However, the POST method NEVER caches data, and is often used to send data along with the request.


2 Answers

Update April 27, 2015

Up and coming to the HTML5 scene is the download attribute. It's supported in Firefox and Chrome, and soon to come to IE11. Depending on your needs, you could use it instead of an AJAX request (or using window.location) so long as the file you want to download is on the same origin as your site.

You could always make the AJAX request/window.location a fallback by using some JavaScript to test if download is supported and if not, switching it to call window.location.

Original answer

You can't have an AJAX request open the download prompt since you physically have to navigate to the file to prompt for download. Instead, you could use a success function to navigate to download.php. This will open the download prompt but won't change the current page.

$.ajax({     url: 'download.php',     type: 'POST',     success: function() {         window.location = 'download.php';     } }); 

Even though this answers the question, it's better to just use window.location and avoid the AJAX request entirely.

like image 197
Steven Lambert Avatar answered Sep 27 '22 22:09

Steven Lambert


To make the browser downloads a file you need to make the request like that:

 function downloadFile(urlToSend) {      var req = new XMLHttpRequest();      req.open("GET", urlToSend, true);      req.responseType = "blob";      req.onload = function (event) {          var blob = req.response;          var fileName = req.getResponseHeader("fileName") //if you have the fileName header available          var link=document.createElement('a');          link.href=window.URL.createObjectURL(blob);          link.download=fileName;          link.click();      };       req.send();  } 
like image 39
João Marcos Avatar answered Sep 27 '22 23:09

João Marcos