有没有办法知道有关准备下载的文件的浏览器事件已被解雇?我有一个生成文件的脚本,当发生这种情况时,我会显示一个laoding gif。一旦出现此消息:http://i.stack.imgur.com/CmZHE.png(文件准备下载,脚本完成)我想停止gif。
用JS知道这个吗?使用ajax是一种选择,但需要更长的时间,因为它需要对系统进行多次修改。
谢谢!
答案 0 :(得分:2)
对于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: '/' })
答案 1 :(得分:0)
我遇到了同样的问题,并分两步选择了解决方案。
我认为这是一个很好的解决方案,可以在准备文件时显示和隐藏spinner.gif和/或等待消息,直到下载准备好开始。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select=
"//*/*/*[not(../following::*/*
[not(name() = name(current()))]
)
]">
<xsl:value-of select="concat(name(), ' ')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
来调用我的下载功能。这将在服务器端准备我的PDF并由客户端将其存储在可访问的文件夹中(例如domain.ext / documents / my_pdf_name.pdf)。HTML(bootstrap 3):
form1
jQuery:
?cmd=prepare
PHP服务器端:
<a href="/search/download" class="btn btn-primary pull-left download">
<i class="fa fa-file-pdf-o"></i> Download result in PDF
</a>
$(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();
}
});
});
});
将文件名返回给客户端,在我的ajax查询中的成功函数中,我调用// ajax call
if(addslashes($_GET["cmd"]) == "prepare") {
echo create_pdf($_SESSION["search"], $out="prepare");
die();
}
向我显示“另存为窗口”。服务器端文档的准备工作由ajax调用,但下载不是!