有什么方法可以知道有关准备下载文件的浏览器事件已触发?我有一个生成文件的脚本,当这发生时,我显示了一个 laoding gif。一旦出现此消息:http: //i.stack.imgur.com/CmZHE.png(文件可供下载,脚本已完成)我想停止 gif。
有可能用JS知道这一点吗?使用 ajax 是一种选择,但需要更长的时间,因为它需要对系统进行多次修改。
谢谢!
有什么方法可以知道有关准备下载文件的浏览器事件已触发?我有一个生成文件的脚本,当这发生时,我显示了一个 laoding gif。一旦出现此消息:http: //i.stack.imgur.com/CmZHE.png(文件可供下载,脚本已完成)我想停止 gif。
有可能用JS知道这一点吗?使用 ajax 是一种选择,但需要更长的时间,因为它需要对系统进行多次修改。
谢谢!
我是按照这个例子做的:http: //geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx
对于 PHP,请注意这是发送 cookie 的方式:
header('Content-type: application/octet-stream');
header('Set-Cookie: fileDownload=1; path=/');
header('Content-Disposition: attachment; filename='.$filename);
上面的路径非常重要。那么JS也需要移除cookie的路径,像这样:
$.removeCookie('fileDownload', { path: '/' })
我遇到了同样的问题,并分两步选择了解决方案。
我认为这是一个很好的解决方案,可以在准备文件时显示和隐藏 spinner.gif 和/或等待消息,直到下载准备好开始。
?cmd=prepare
在我的 uri 上添加 a 来调用我的下载功能。这将在服务器端准备我的 PDF 并将其存储在客户端可访问的文件夹中(例如 domain.ext/documents/my_pdf_name.pdf)。HTML(引导程序 3):
<a href="/search/download" class="btn btn-primary pull-left download">
<i class="fa fa-file-pdf-o"></i> Download result in PDF
</a>
jQuery :
$(function() {
$('.download').on('click', function(e) {
e.preventDefault();
$('.loading').show();
url = $('.download').attr('href') + '?cmd=prepare';
$.ajax({
url: url,
type: 'get',
success: function(filename) {
console.log(data);
window.location = filename;
$('.loading').hide();
}
});
});
});
PHP服务器端:
// ajax call
if(addslashes($_GET["cmd"]) == "prepare") {
echo create_pdf($_SESSION["search"], $out="prepare");
die();
}
create_pdf()
会将文件名返回给客户端,并且在我的 ajax 查询中的成功函数中,我调用 awindow.location = filename
来显示“另存为窗口”。服务器端文档的编写是通过ajax调用的,但是下载不是!