簡體   English   中英

通過單擊按鈕下載文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM