我有一个ColdFusion页面,它遍历一个(可能)长的查询,可以有几百个项目循环并显示。第一次访问该页面时,页面加载可能会有3-10秒的延迟。我最近没跟谷歌好运,也没找到关于如何显示加载gif的非常好的教程。有人可以帮帮我吗?据我所知,ajax通常用于此,但如果可能的话,我想回避这个并使用jQuery解决方案。提前谢谢!
<cfdirectory directory="(dir name)" name="dirQuery" type="file" filter="*.pdf" action="list">
...html table start goes here...
<cfloop query="dirQuery">
...items go here...
</cfloop>
这仅适用于内部用户,因此不必非常漂亮。我只是不希望用户在认为页面未加载时获得点击快乐。
答案 0 :(得分:3)
我不打算为此提供代码,因为有一百万个教程用于使用jquery来创建ajax,但作为6的启动器,你会想要查看jQuery ajax功能:
类似的东西:
$.ajax({
url: data.cfm
}).done(function(data){
alert(data);
});
此处提供了更多信息:http://api.jquery.com/jQuery.ajax/
您希望将已有的代码移到单独的cfm
中,这样您最终可能会:
index.cfm
其中jQuery调用代码是和;
data.cfm
您当前的代码所在的位置。
答案 1 :(得分:1)
不是使用<cfdirectory>
来获取一个目录中的所有文件和文件夹,而是查询查询以仅提取那些PDF文件,使用filter
属性可能会更快在cfdirectory上只能获取PDF文件,并且不必再进行QoQ。
<cfdirectory directory="(dir name)" name="dirQuery" filter="*.pdf" type="file">
<cfloop query="dirQuery">...</cfloop>
答案 2 :(得分:1)
根据您的问题,您要做的就是在请求开始时向浏览器发送“加载”标记,这样用户就可以查看其余的请求运行并生成其余的加价?
你是否想过像“我正在工作”的旋转球,或者显示慢速运行代码的实际进展的东西?你不是很清楚。
如果它只是一个“我很忙”的图像,那么只需输出图像标记,然后刷新缓冲区:
<img src="whatever.gif">
<cfflush>
然后该批次将立即发送到浏览器,而其余请求将继续。
如果您想提供真实的遥测进度,那么您将需要一个更复杂的解决方案,让浏览器轮询服务器(通过AJAX)以获取其在过程中所处位置的一些指示。我敢肯定JQuery等有一个插件可以做到这一点。 Google jquery进度指示器“(类似于this)。
CF提供<cfprogressbar>
标记,但我从不主张使用服务器端代码来生成客户端功能。
答案 3 :(得分:0)
如果目标是阻止点击快乐用户发出多个网页请求,则可以使用其他选项。
首先,使用javascript隐藏表单提交按钮和/或锚标记一旦发出请求。
其次,使用cfflush。