需要帮助设置睡眠以延迟coldfusion循环中的下一个查询吗

需要帮助设置睡眠以延迟coldfusion循环中的下一个查询吗,coldfusion,sleep,cfloop,Coldfusion,Sleep,Cfloop,我和Coldfusion 11一起跑步。我有一个即时通讯工具,它使用元刷新,每30秒刷新一次页面,以获取新的即时消息。这个问题是页面重新加载的快闪,我真的希望它每15秒刷新一次。我决定尝试改变,并与循环去检查任何看不见的消息。如果有,它将重新加载页面。如果没有,我希望它在继续循环之前休眠15秒。正如你所看到的,我已经设置了40次。每隔15秒,它将在10分钟内超时。如果一个用户没有张贴新的消息或者在那个时候改变了页面,我们认为他们已经注销了。下面的代码在本页末尾。我遇到的问题是,在cloop完成之

我和Coldfusion 11一起跑步。我有一个即时通讯工具,它使用元刷新,每30秒刷新一次页面,以获取新的即时消息。这个问题是页面重新加载的快闪,我真的希望它每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>
谢谢,
Mike

您应该能够使用定期从服务器返回内容

我决定使用带有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>

我感谢你的投入和指导

您是否考虑过使用AJAX加载新消息而不是刷新整个页面?或者,你可以使用websockets。我在编写代码更改后意识到CF将在显示页面之前运行整个循环,包括睡眠。我在WebSocket方面做得不多。是时候做些功课了。对于同时进行的活动,还有cfthread。您是否在AJAX方面做了很多工作,这可能是一个比WebSocket更容易实现的解决方案——不过WebSocket很酷?您可以将JS函数设置为每隔一段时间调用一次。您可以使用它来进行AJAX调用和检索新消息,比如每分钟一次,然后使用响应填充您的聊天窗口。你不必刷新整个页面。我可能说得太快了。它在铬上工作得非常好。然而IE11对此并不满意。脚本没有启动。