我有一个按钮,它将window.location设置为php文件,生成一个Feed然后下载。但是,由于文件的大小不同,由于数据放入了Feed中,因此从点击按钮到弹出的文件对话框有时需要一段时间。
我希望能够做的是单击按钮并显示loading.gif,直到对话框/文件完成。
任何想法都会很酷!
干杯
答案 0 :(得分:5)
我不确定为什么你需要检查文件的大小?如果你使用ajax动态地执行get / post,并且你正在做的就是在发生这种情况时尝试显示加载图标,那么抛出异步活动指示器就相当简单了。例如,使用jquery:
$("#loading").ajaxStart(function(){
$(this).show();
});
$("#loading").ajaxStop(function(){
$(this).hide();
});
$("#feeds").load("feeds.php?id=89734258972347895");
上面的代码设置一个id为“loading”的DOM对象,以便在启动和停止任何异步请求时显示和隐藏。 .load(url)将url的内容加载到div #feeds中。如果您使用php设置content-disposition:attachment标头,它将自动启动文件下载窗口,即使它已异步加载到div中。这也是可能的,当然没有jquery,只有一堆浏览器兼容性javascript,它不像简单订阅ajaxStart和ajaxStop事件那样容易显示和隐藏你的加载img。
约什
答案 1 :(得分:1)
在设置window.location之前,你可以用你的gif
显示一个隐藏的div答案 2 :(得分:1)
这是旧学校,但这可以通过服务器推送轻松完成
<?php
$separator = "end_of_section_marker";
header('Content-type: multipart/x-mixed-replace;boundary=$separator');
print "\n--$separator\n";
print "Content-type: text/html\n\n";
// Send placeholder message here
print "--$separator\n";
ob_flush();
flush();
// Start long processing here
print "Content-type: text/html\n\n";
// send data here
print "--$separator--\n";
?>
只需调整您要发送的数据的内容类型即可。 $ separator可以是任何值,只要它不会出现在正在发送的数据中。
答案 3 :(得分:1)
我过去使用过的方法就是这样......
编辑:加载页面应使用javascript重定向到目标页面(将window.location设置为查询字符串中提供的URL)。这一点非常重要,因为如果您在服务器端重定向,则不会显示加载页面。
编辑2:如果您的加载页面是一个php文件,您可以检查要下载的文件的大小,并向用户显示估计的下载时间(以及动画“加载”gif)或诸如此类的东西。
答案 4 :(得分:0)
您必须使用AJAX与服务器通信才能发现正在下载的文件的确切大小。然后你有一些东西需要测试。无法从客户端知道预期有效负载的大小。
答案 5 :(得分:0)
您是否可以使用iframe加载Feed,然后使用间隔检查iframe /文档的readyState?所以过程将是:
一个缺点是,对于大多数浏览器而言,PHP文件需要位于同一个域中(在IE上,您只需检查iframe的readyState属性)。
答案 6 :(得分:0)
只需让RSS生成脚本显示您想要的图像(输出图像的HTML,然后刷新输出缓冲区并开始生成数据)。在数据生成结束时:
<?php
print '<script>window.location = "http://www.newlocation.com"</script>'
这就是全部。