Adobe ColdFusion 8

cfflush

描述

将目前已有的数据推送到客户端.

类别

数据输出标签, 页面处理标签

语法

<cfflush    interval = "数据量整数大小(bytes)">
注: attributeCollection 属性是一个数组的形式时,你可以在attributeCollection 属性指定该标签的属性,在attributeCollection 属性指定数组名称,并将使用该标签的属性名称作为数组的值.

属性

属性

必选/可选

默认

描述

interval

可选

 

整数. 当数据达到该数值的大小时,开始推送数据.另当该标签开始执行时,HTML 标题头,和在该标签之前已有的数据是不在数值大小计算的范围之内。

用途

该标签第一个响应将发送HTML头部内容及目前已产生的内容, 随后cfflush 标签只发送上一个推送操作之后的内容.

当推送数据时,请确保数据包大小分片大小是否足够,部分浏览器可能因为数据量太小而导致没有响应请求,一般情况, 设置 interval 属性为100多bytes以上,但不要超过1000 bytes.

当需要传送大量数据到客户端才使用interval 属性,如 cfloop 或者 cfoutput 执行一个巨大的查询. 在全局模式下使用这种方式 (如在Application.cfm 使用该标签) 当 CFML 标签修改 HTML 头部. 将会引起不可预料的错误 。

cfflush 标签在执行过程中发送数据到客户端的浏览器,于是有以下几个限制条件:

  • 以下标签在 cfflush 标签的之后位置使用,都会引起错误,或者引起不可预料的错误: cfcontent, cfcookie, cfform, cfheader, cfhtmlhead, cflocation, 和 SetLocale. 同样, 也不要使用任何使用AJAX特性的标签,包括 cfdiv, cflayout, cflayoutarea, cfpod, cfsprydataset, cftooltip, cfwindow, 或者是 HTML 格式的 cfgrid, cftree, cftextarea, 或者 cfinput (使用自动完成的属性) 标签. 所以这些页面处理标签一般都会修改HTML头部, 但在cfflush 标签之后都无法操作, 因为cfflush 已经将HTML头部内容发送出去.
  • 在已经使用 cfflush 标签的页面中,不管在页面任何地址用cfset 标签设置浏览器的 cookies都不会生效.
  • 在以下标签包括范围内 cfsavecontent, cfquery, and 自定主标签,使用 cfflush 标签 ,将引起错误.
  • 如果你用cookies 保存客户端变量, 在 cfflush 标签之后的客户端变量将不会保存在浏览器中。

注: 一般的, cferror 标签丢弃当前输出缓存,并以错误的页面内容代替。 cfflush 标签丢充当前的缓存. 所以, cfflush 之后的cferror 标签变量Error.GeneratedContent 包含的所有内容缓存将不会直接推送至客户端. 而是当CFflush 的缓存内容显示完毕再显示错误页面的内容.

范例

以下的范例用了 cfloop 标签和 rand 随机产生数据 来延时显示数据.模拟一个显示页面数据非常慢的环境。

<h1>Your Magic numbers</h1>
<p>It will take us a little while to calculate your ten magic numbers. It takes a lot of work to find numbers that truly fit your personality. So relax for a minute or so while we do the hard work for you.</p>
<H2>We are sure you will agree it was worth the short wait!</H2>
<cfflush>

<cfflush interval=10>
<!--- Delay Loop to make it seem harder. --->
<cfloop index="randomindex" from="1" to="200000" step="1">
    <cfset random=rand()>
</cfloop>

<!--- Now slowly output 10 random numbers. --->
<cfloop index="Myindex" from="1" to="10" step="1">
    <cfloop index="randomindex" from="1" to="100000" step="1">
        <cfset random=rand()>
    </cfloop>
    <cfoutput>
        Magic number #Myindex# is:&nbsp;&nbsp;#RandRange
        100000, 999999)#<br><br>
    </cfoutput>
</cfloop>