2011-02-14 57 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