Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mencetuskan Muat Turun Fail dalam AJAX Post Responses?

Bagaimanakah Saya Boleh Mencetuskan Muat Turun Fail dalam AJAX Post Responses?

Mary-Kate Olsen
Lepaskan: 2024-12-20 09:34:07
asal
828 orang telah melayarinya

How Can I Trigger File Downloads in AJAX Post Responses?

Mengendalikan Muat Turun Fail dalam AJAX Post Responses

Apabila mereka bentuk aplikasi AJAX, adalah perkara biasa untuk mengendalikan pelbagai jenis respons, termasuk JSON dan kemungkinan fail lampiran. Mengesan jenis respons berdasarkan pengepala Jenis Kandungan dan Pelupusan Kandungan adalah mudah. Walau bagaimanapun, mencetuskan dialog muat turun boleh menimbulkan cabaran.

Mujurlah, penyemak imbas moden menyediakan penyelesaian melalui FileAPI. Coretan kod berikut menunjukkan cara melaksanakan muat turun fail dalam permintaan siaran AJAX:

// Using native XMLHttpRequest
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.responseType = 'blob';
xhr.onload = function () {
  if (this.status === 200) {
    // Retrieve the blob and filename from the response
    var blob = this.response;
    var filename = "";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('attachment') !== -1) {
      filenameRegex = /filename[^;=\n]*=((['"])).*?|[^;\n]*)/;
      matches = filenameRegex.exec(disposition);
      if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
    }
    // Manage file download based on browser capabilities
    if (typeof window.navigator.msSaveBlob !== 'undefined') {
      // IE workaround for a known issue
      window.navigator.msSaveBlob(blob, filename);
    } else {
      var URL = window.URL || window.webkitURL;
      var downloadUrl = URL.createObjectURL(blob);
      var a = document.createElement("a");
      if (a.download !== 'undefined') {
        a.href = downloadUrl;
        a.download = filename;
        document.body.appendChild(a);
        a.click();
      } else {
        window.location.href = downloadUrl;
      }
      setTimeout(function() { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
    }
  }
};
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send($.param(params, true));
Salin selepas log masuk

Jika menggunakan jQuery.ajax:

$.ajax({
  type: "POST",
  url: url,
  data: params,
  xhrFields: {
    responseType: 'blob' // to avoid binary data being mangled on charset conversion
  },
  success: function(blob, status, xhr) {
    // Retrieve the blob and filename from the response
    var filename = "";
    var disposition = xhr.getResponseHeader('Content-Disposition');
    if (disposition && disposition.indexOf('attachment') !== -1) {
      filenameRegex = /filename[^;=\n]*=((['"])).*?|[^;\n]*)/;
      matches = filenameRegex.exec(disposition);
      if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
    }
    // Manage file download based on browser capabilities
    if (typeof window.navigator.msSaveBlob !== 'undefined') {
      // IE workaround for a known issue
      window.navigator.msSaveBlob(blob, filename);
    } else {
      var URL = window.URL || window.webkitURL;
      var downloadUrl = URL.createObjectURL(blob);
      var a = document.createElement("a");
      if (a.download !== 'undefined') {
        a.href = downloadUrl;
        a.download = filename;
        document.body.appendChild(a);
        a.click();
      } else {
        window.location.href = downloadUrl;
      }
      setTimeout(function() { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
    }
  }
});
Salin selepas log masuk

Dengan menggabungkan teknik ini, anda boleh memastikan AJAX anda permintaan siaran boleh mengendalikan lampiran fail dengan lancar dan mencetuskan dialog muat turun untuk pelanggan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencetuskan Muat Turun Fail dalam AJAX Post Responses?. 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