第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通過 AJAX 調(diào)用時(shí),PHP 下載腳本不起作用

通過 AJAX 調(diào)用時(shí),PHP 下載腳本不起作用

PHP
瀟瀟雨雨 2023-03-26 16:23:50
我的服務(wù)器上有一個(gè)簡單的 PHP 腳本,它應(yīng)該下載給定的文件。如果我直接使用http://myDomain/download.php?filename=mini.gpx調(diào)用它,它工作正常下載.php:<?php$dir = 'download/';$file = $_GET['filename'];$fqn = $dir . $file;$fileSize = filesize($fqn);header("Content-Type: text/xml");header("Content-Disposition: attachment; filename=\"$file\"");header("Content-Length: $fileSize");readfile($fqn);   ?>但我想從 JavaScript 開始這個(gè)腳本。所以我試著用 httpRequest 來做:function downloadGPXfile(fn) {    let script = `downloadGPXfile.php?filename=${fn}`;    let xhr = new XMLHttpRequest();    xhr.onreadystatechange = function() {        console.log("state downloadGPXfile: ", this.readyState);        console.log("status: ", this.status);    };    xhr.open('GET', script, true);    xhr.setRequestHeader('Content-Type', 'text/xml');    xhr.send();}盡管 AJAX 連接似乎成功,但下載對(duì)話框并未激活。我做錯(cuò)了什么?還是有另一種更簡單的解決方案來開始下載?
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

你誤解了 XMLHttpRequest 的用途,它主要用于反應(yīng)性,例如當(dāng)我們想要加載由 php 生成的列表而無需重新加載頁面時(shí),


你可以用它來實(shí)現(xiàn)它,但因?yàn)槟悴恍枰?,一個(gè)簡單的方法是打開一個(gè) _blank 窗口到你提供的鏈接,這樣你的函數(shù)看起來像


function downloadGPXfile(fn) {

    let script = `downloadGPXfile.php?filename=${fn}`;

window.open('http://website/downloadGPXfile.php?filename=' + fn, '_blank');

}

下載對(duì)話框顯示后,窗口關(guān)閉,因此您的 php 看起來像


<?php

$dir = 'download/';

$file = $_GET['filename'];

$fqn = $dir . $file;

$fileSize = filesize($fqn);

header("Content-Type: text/xml");

header("Content-Disposition: attachment; filename=\"$file\"");

header("Content-Length: $fileSize");

readfile($fqn);   


echo "

<script>

window.close();

</script>";


?>

如果這對(duì)您不起作用,但為了清楚起見,窗口將顯示最多 1 秒然后關(guān)閉,您可以使用


function downloadGPXfile(fn) {

let fileurl = `http://website/downloadGPXfile.php?filename=${fn}`;

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {

if (this.readyState == 4 && this.status == 200) {

    var downloadUrl = URL.createObjectURL(xhttp.response);

    var a = document.createElement("a");

    document.body.appendChild(a);

    a.style = "display: none";

    a.href = downloadUrl;

    a.download = "";

    a.click();

}

};

xhttp.open("GET", fileurl, true);

xhttp.responseType = "blob";

xhttp.send();

}

你看你需要刺激就像用戶點(diǎn)擊了一個(gè)有對(duì)象的


查看完整回答
反對(duì) 回復(fù) 2023-03-26
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)