需要帮助设置sleep以延迟使用coldfusion的循环中的下一个查询

时间:2014-05-14 20:33:47

标签: coldfusion sleep cfloop

我正在使用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>

谢谢, 麦克

2 个答案:

答案 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>定期从服务器返回内容。