我有一个按钮,它将window.location设置为一个php文件,该文件生成一个feed,然后下载。但是,由于文件中的数据大小各不相同,因此从点击按钮到弹出文件对话框有时需要一段时间。检测文件是否已被提供给浏览器?.. kinda
我希望能够做的是点击按钮并显示一个loading.gif,直到对话框/文件完成。
任何想法都会很酷!
干杯
我有一个按钮,它将window.location设置为一个php文件,该文件生成一个feed,然后下载。但是,由于文件中的数据大小各不相同,因此从点击按钮到弹出文件对话框有时需要一段时间。检测文件是否已被提供给浏览器?.. kinda
我希望能够做的是点击按钮并显示一个loading.gif,直到对话框/文件完成。
任何想法都会很酷!
干杯
只需制作RSS生成脚本显示图像(输出图像的HTML,然后刷新输出缓冲区并启动数据生成)。在数据生成结束时,请执行以下操作:
<?php
print '<script>window.location = "http://www.newlocation.com"</script>'
就是这样。
此外,请注意“某些版本的Microsoft Internet Explorer只有在收到256个字节的输出后才会开始显示页面,因此您可能需要在刷新之前发送额外的空格以使这些浏览器显示该页面。” – 2009-09-18 12:34:11
之前设置window.location,你可以用你的GIF
我们如何知道何时再次隐藏它? – Serxipc 2009-09-09 16:25:20
隐藏在window.location之后我会想象。 – CodeMonkey1313 2009-09-10 00:43:30
是的...这不会工作 – 2009-09-17 14:43:53
你将不得不使用AJAX来与服务器通信,以发现你正在下载的文件的确切大小显示隐藏的股利。然后你有什么要测试。无法仅从客户端获知预期有效负载的大小。
是否有可能使用iframe加载提要,然后使用间隔检查iframe /文档的readyState?因此,该过程将是:
一个缺点是,对于大多数浏览器PHP文件需要在同一个域(在IE上,你可以检查iframe的readyState属性)。
我不是很确定为什么你需要检查文件的大小吗?如果您使用ajax来动态地执行get/post,并且您正在做的所有事情都是在发生这种情况时尝试显示加载图标,那么抛出异步活动指示器非常简单。例如,使用jQuery:
$("#loading").ajaxStart(function(){
$(this).show();
});
$("#loading").ajaxStop(function(){
$(this).hide();
});
$("#feeds").load("feeds.php?id=89734258972347895");
上述代码设置ID为“加载” DOM对象显示,当任何异步请求已经启动和停止隐藏。 .load(url)将url的内容加载到div #feeds中。如果你用php设置content-disposition:attachment header,它会自动启动一个文件下载窗口,即使它已经被异步加载到一个div中。这当然也可能没有jQuery,当然,只有一堆浏览器兼容性的JavaScript,它不像简单订阅ajaxStart和ajaxStop事件来显示和隐藏你的加载img一样简单。
乔希
这是老同学,但是可以使用服务器推送很容易做到
<?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可以是任何值,只要它不出现在正在发送的数据中。
我已经在过去使用的是这样的一种方法,...
编辑:加载页面应该重定向到目标页面使用JavaScript(设置window.location到查询字符串中提供的URL)。这是一个重要的观点,因为如果您在服务器端重定向,加载页面将不会显示。编辑2:如果你的加载页面是一个php文件,你可以检查下载的文件的大小,并显示预计的下载时间给用户(以及动画“加载”gif),或者什么都不是。
是的,这应该工作,并且很容易实现。 +1 – 2009-09-17 19:06:21
问题是操作是异步的。当我不应该关注我的未婚妻时,让我做一些测试并回复你。 – 2009-09-12 07:21:02
您是否有样本页面我可以查看一下,这样我可以更好地了解您要做什么? – 2009-09-15 08:25:00
通过“下载”你的意思是提供给用户的实际下载/保存对话框? – 2009-09-17 16:29:14