[英]Download a file by clicking a button
這是 HTML:
<button name="download">Download</button>
我希望用戶在單擊此按鈕時下載文件。 為此,我使用了以下 Ajax 請求:
$parent.find('button[name=download]').click(function () {
$.ajax({
url: "download.php",
sucess: function(data, status, jqXHR){
$console.text('Download efetuado');
},
error:function(xhr, status, error){
$console.text(xhr.responseText);
}
});
});
其中 download.php 是:
if (file_exists($myFile)){
header ("Content-Type: application/json");
header ("Content-Disposition: attachment; filename=$fileName");
header("Content-Length: " . filesize("$myFile"));
$fp = fopen("$myFile", "r");
fpassthru($fp);
} else {
echo "no file exists";
};
這不會輸出任何內容,也不會下載任何文件。 我知道 PHP 腳本正在運行並且正在被調用。
不要使用 AJAX 下載文件。 並不是它不能發出請求並接收響應,只是它實際上沒有任何有意義的方式來處理響應。
另一方面,瀏覽器本身可以。
因此,您可以將瀏覽器定向到請求:
$parent.find('button[name=download]').click(function () {
window.location.href = 'download.php';
});
如果download.php
正在發送Content-Disposition: attachment;
那么該頁面將不會以任何方式卸載或修改。 瀏覽器將完全獨立於當前頁面上下文來處理此請求的響應,並且在處理響應后頁面上下文將保留。
(當然,除非瀏覽器被配置為對該響應執行某些操作,例如始終顯示它而不是提示保存它。但在代碼中您無能為力。)
在這一點上,實際上,完全刪除 JavaScript 並使其成為普通鏈接更有意義,這將完成相同的事情:
<a href="download.php">Download</a>
您可以將其樣式設置為看起來像一個按鈕,這可能比運行 JavaScript 代碼的實際按鈕更易於訪問。 (如果瀏覽器沒有啟用 JavaScript,那么按鈕將無用,但鏈接會正常工作。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.