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
Barbara Streisandasal
2024-12-09 17:50:12643semak imbas

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();

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");
?>

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';
}

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';
    }
});

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!

Kenyataan:
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