1

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

谢谢,迈克

4

2 回答 2

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>

我感谢输入和方向!

于 2014-05-15T15:21:10.590 回答
-1

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

于 2014-05-15T06:49:17.180 回答