我正在使用Coldfusion 11.我有一个即时消息,它使用元刷新每30秒刷新一次页面以提取新的IM。这个问题是页面重新加载的闪存,我真的希望它每15秒刷新一次。我决定尝试更改并使用循环来检查任何看不见的消息。如果有,则会重新加载页面。如果不是,我希望它在继续循环之前休眠15秒。正如你所看到的,我已经将它设置为40次。每隔15秒,它将在10分钟时超时。如果用户尚未发布新消息或在此时更改了页面,我们会将其视为已注销。以下代码位于页面末尾。我遇到的问题是在cloop完成之前没有消息显示。有没有办法设置循环在后台运行,但显示当前消息?
<cfloop from="1" to="40" index="i">
<cfset sleep(15000)>
<cfquery name="messck" datasource="mysource" maxrows="1">
SELECT id
FROM messages
WHERE user = '#getuser.code#' AND friend = '#getme.code#' AND seendate IS NULL
ORDER BY ID DESC
</cfquery>
<cfif messck.recordcount EQ 0>
<cfelse>
<cflocation url="messagebox.cfm?code=#url.code#">
</cfif>
</cfloop>
谢谢, 麦克
答案 0 :(得分:0)
我决定使用一些带有Ajax功能的JQuery,它完美地解决了我的问题。 我在显示消息的页面中添加了几个脚本链接,messages.cfm
<script language="javascript" src="http://equifax.ipushjobs.com/jquery/jquery-1.2.6.min.js"></script>
<script language="javascript" src="http://equifax.ipushjobs.com/jquery/jquery.timers-1.0.0.js"></script>
然后添加了这个脚本。
<script language="javascript">
$(document).ready(function(){
var j = jQuery.noConflict();
j(document).ready(function()
{
j(".refreshMe").everyTime(5000,function(i){
j.ajax({
url: "messck.cfm?code=#getuser.code#",
cache: false,
success: function(html){
j(".refreshMe").html(html);
}
})
})
});
j('.refreshMe').css({color:"red"});
});
</script>
接下来,我在页面末尾放置一个空div。
<div class="refreshMe"></div>
这是我的messck.cfm它检查来自用户的新消息。如果有新消息,则会导致页面刷新。
<cfquery name="ckfornew" datasource="mysource">
SELECT code
FROM messages
WHERE code = '#url.code#' AND friend = '#session.code#' AND seendate IS NULL
ORDER BY ID DESC
</cfquery>
<cfif ckfornew.recordcount EQ 0>
<cfelse>
<cfoutput>
<meta http-equiv=Refresh content="0;url=messages.cfm?code=#ckfornew.code#">
</cfoutput>
</cfif>
我很感激输入和指导!
答案 1 :(得分:-1)
您应该能够使用<cfflush>
定期从服务器返回内容。