正确的方法来触发文件下载(在PHP中)?

时间:2009-01-15 05:36:09

标签: javascript html download

快速(并且希望简单)问题:我需要触发下载由PHP文件生成的PDF文件。我可以这样做:

<a href="download.php">Download</a>

但我应该这样做吗?可能是Javascript?上面的工作,但窗口显示“正在加载...”,直到下载开始。我想向用户提供一些反馈意见。

想法?

注意:我已经有了从服务器发送文件的代码。它完美地运作。这个问题只是关于如何最好地从客户端调用该脚本。

某些网站会自动启动下载。他们是如何做到的?

直接URL的问题在于,如果PHP脚本出错,它将替换现有页面的内容,这不是我想要的。

4 个答案:

答案 0 :(得分:13)

修改

是javascript,类似于:

<a href="download.php" onclick="this.innerHTML='Downloading..'; downloadPdf(this);">Download</a>

如果您需要真正了解下载何时开始,您可能需要调用iframe,然后在其上使用“onload”事件..例如:

// javascript
function downloadPdf(el) {
    var iframe = document.createElement("iframe");
    iframe.src = "download.php";
    iframe.onload = function() {
        // iframe has finished loading, download has started
        el.innerHTML = "Download";
    }
    iframe.style.display = "none";
    document.body.appendChild(iframe);
}

答案 1 :(得分:3)

您下载的解决方案很好。您可能需要考虑向用户提供一些视觉反馈,可能通过使用javascript在当前页面上显示“正在下载,请等待消息”,当通过onclick处理程序单击链接时。或者只是表明下载可能需要一些时间才能开始链接。由于IE将卸载页面,停止任何GIF动画,我更喜欢文件指示文件下载。

答案 2 :(得分:2)

通过使用onclick事件处理程序来显示旋转的gif

来伪造它
<a href="download.php" onclick="ShowDownloading();">Download</a>

答案 3 :(得分:2)

自动启动下载通常在普通页面中使用元标记:

<META HTTP-EQUIV="REFRESH" CONTENT="10.0;URL=download.php">

此示例将在10秒内将浏览器重定向到download.php。