2011-02-14 28 views
2

我在Coldfusion中有一个循环,它会运行很长时间;大约2-4分钟。Colfdfusion循环状态更新Ajax

我想在每次循环运行时显示状态更新。

循环:

<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更新?

回答

3

我想这样做的方式是用唯一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 

例如:

  1. 脱掉上面AJAX请求中描述的方法。该请求将启动代码以上作为线程(所以它立即返回),并返回一个UUID值表示请求
  2. 如上所述将写与UUID的进展到一个数据库表中的每个条目
  3. 轮询的方法使用不同的脚本使用AJAX每隔几秒钟使用UUID值查找目前的进度

但也许还有其他方法!

希望它有帮助。 Ciaran

+0

谢谢。这确实是一个更好的解决方案。谢谢! – Proto 2011-02-14 10:20:01