Rumah > hujung hadapan web > tutorial js > Mengapa AJAX Tidak Berfungsi untuk Muat Turun Fail, dan Apakah Alternatif Terbaik?

Mengapa AJAX Tidak Berfungsi untuk Muat Turun Fail, dan Apakah Alternatif Terbaik?

Barbara Streisand
Lepaskan: 2024-12-09 17:50:12
asal
593 orang telah melayarinya

Why Doesn't AJAX Work for File Downloads, and What's the Best Alternative?

Memuat Turun Fail dengan Permintaan AJAX: Panduan Komprehensif

Masalah: Percubaan untuk memulakan "permintaan muat turun ajax" apabila klik butang tidak menghasilkan hasil yang diingini. Demonstrasi dalam JavaScript dan PHP disediakan di bawah:

JavaScript:

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

PHP (muat turun.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");
?>
Salin selepas log masuk

Kod di atas tidak berfungsi seperti yang dijangkakan. Bolehkah anda memberikan cerapan tentang langkah yang diperlukan untuk menyelesaikan isu ini?

Penyelesaian:

Memulakan muat turun fail melalui permintaan AJAX tidak boleh dilaksanakan. Untuk tugasan ini, akses terus kepada fail diperlukan.

Penyelesaian Kemas Kini (27 April 2015):

Gunakan Atribut 'muat turun':

  • HTML5 memperkenalkan atribut 'muat turun'. Ia disokong oleh Firefox dan Chrome, dan tidak lama lagi akan disertakan dalam IE11. Ia membenarkan muat turun fail terus pada asal yang sama.

JavaScript:

// Check if 'download' is supported
if ('download' in HTMLAnchorElement.prototype) {
    // Create an anchor element
    var anchor = document.createElement('a');

    // Set 'download' attribute and file URL
    anchor.download = 'file.txt';
    anchor.href = 'download.php';

    // Trigger file download
    anchor.click();
} else {
    // Fallback to previous method
    window.location = 'download.php';
}
Salin selepas log masuk

Penyelesaian Asal:

Gunakan 'window.location':

  • Tidak seperti permintaan AJAX, 'window.location' menavigasi terus ke fail, mencetuskan muat turun.

JavaScript :

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

Untuk kesederhanaan, adalah disyorkan untuk mengelakkan permintaan AJAX semuanya dan hanya gunakan 'window.location'.

Atas ialah kandungan terperinci Mengapa AJAX Tidak Berfungsi untuk Muat Turun Fail, dan Apakah Alternatif Terbaik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan