2009-01-15 106 views
7

快速(并希望容易)问题:我需要触发一个由PHP文件生成的PDF文件的下载。我能做到这一点:正确的方式来触发文件下载(在PHP中)?

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

但我应该这样做另一种方式? Javascript可能?上述工作,但窗口显示“加载...”,直到下载开始。我想向用户提供一些反馈意见,指出发生了什么。

想法?

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

一些网站有自动启动的下载。他们如何做到这一点?

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

+1

这个问题与PHP无关,它的标题,措辞和标记误导性吸引了访问者寻找完全不同的东西。我写这篇文章是因为这是我在寻找真正关于PHP的东西时得到的第一个结果。我试图编辑,但我的编辑被拒绝:(所以我好心地问原始的海报或其他谁有足够的特权从本文中删除任何对PHP的引用 – Tom 2012-08-23 13:12:41

+0

发生在我身上也是汤姆,编辑 – 2012-12-24 16:19:08

回答

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

通过使用onclick事件处理程序显示一个旋转的GIF假的

<a href="download.php" onclick="ShowDownloading();">Download</a> 
3

您下载的解决方案没问题。您可能需要考虑向用户提供一些视觉反馈,也许可以通过使用JavaScript在当前页面上显示“正在下载,请稍候消息”,然后通过onclick处理程序单击该链接。或者只是简单地指出下载可能需要一些时间才能在链接旁边开始。由于IE会卸载页面,停止任何GIF动画,我更喜欢文本下载的文本指示。

2

自动启动下载通常用一个meta标签正常页面内:

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

这个例子将重定向浏览器在10秒内的download.php。