我在 Coldfusion 中有一个循环,它将运行很长时间;大约2-4分钟。
我想在每次循环运行时显示状态更新。
循环:
<cfloop index="i" from=1 to=70>
<cfset allHtmlFiles=getThirdXml.XmlRoot.XmlChildren[i].XmlChildren[1].XmlText>
<cfset ArrayAppend(seekurl, allHtmlFiles)>
</cfloop>
负责显示数据的循环:
<cfloop index="loopcount" from=1 to=92>
<cfset checkThisUrl = #seekurl[loopcount]#>
<cfset completeUrl ="http://myurl.com/?ids=#checkThisUrl#">
<cfhttp result="get" method="get" url="#completeUrl#">
<cfset nieuw =deserializeJSON( get.filecontent )>
<cfoutput>
<tr>
<cfif nieuw[checkThisUrl].id IS NOT 0>
<td>#nieuw[checkThisUrl].id#</td>
</cfif>
<cfif isDefined("nieuw[checkThisUrl].shares")>
<td style="text-align: right">#nieuw[checkThisUrl].shares#</td>
</cfif>
</tr>
</cfoutput>
</cfloop>
如何在每次运行时完成 Ajax 更新?
最佳答案
我的方法是使用唯一 ID(如 UUID)将迄今为止的进度写入数据库。然后,您可以使用 AJAX 轮询不同脚本来获取脚本的进度。
数据库表可能如下所示:
InsertedOn | Data | UUID
2011-02-12 13:01 | MyProcessData1 | MyUUID1
2011-02-12 13:02 | MyProcessData2 | MyUUID1
2011-02-12 13:03 | MyProcessData3 | MyUUID1
2011-02-12 13:10 | MyProcessData1 | MyUUID2
2011-02-12 13:11 | MyProcessData2 | MyUUID2
2011-02-12 13:12 | MyProcessData3 | MyUUID2
例如:
- 通过 AJAX 请求启动上述过程。该请求将作为线程启动上面的代码(因此它会立即返回)并返回代表该请求的 UUID 值
- 上述过程将使用每个条目的 UUID 将进度写入数据库表
- 每隔几秒使用 AJAX 使用不同的脚本进行轮询,使用 UUID 值查找到目前为止的进度
也许还有其他方法!
希望有帮助。 夏兰
关于ajax - Colfdfusion循环状态更新Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990523/