2013-04-07 58 views
1

我正在使用setTimeout來刷新頁面,其中jquery模板項目將被更新。相關代碼如下:setTimeout在發生頁面錯誤時停止工作?

<script type="text/javascript"> 
     var results = JSON.parse('@svgPath'.replace(/&quot;/g,'"')); 

      window.onload = setupRefresh; 

      function setupRefresh() { 
      setTimeout("refreshPage();", 300); // milliseconds 
      } 
      function refreshPage() { 

      $("#resultTemplate").tmpl(results, { 
       checkLink : function(key) { 
       var linkRes = this.data[key]; 
       checkFile(linkRes, callbackFunc); 
       alert("refreshed?"); 
       return window.myRet; 
       } 
      }).appendTo("#resultList"); 
      } 
    </script> 

jQuery的模板:

<script id="resultTemplate" type="text/x-jquery-tmpl"> 
     <li> 
      {{if $item.checkLink("link") == 1}} 
        <a href = ${link}>${type}</a> 
      {{else}} 
      ${type} 
      {{/if}} 
     </li> 
    </script> 

當我運行我的應用程序,它看來,如果該鏈接不可用(在AJAX功能checkFile(linkRes, callbackFunc);會導致未找到404錯誤,那麼計時器似乎停止。 但我希望定時器持續執行,也就是說,refreshPage繼續被調用。我怎樣才能做到這一點? 謝謝!

+1

'setTimeout'執行一次函數。什麼會使它多次執行? – Koterpillar 2013-04-07 00:05:15

回答

1

你confusi ng異步代碼和同步代碼。您應該將setTimeout附加到ajax的onSuccess和onFailure事件的結尾處。正如你所寫的,假設AJAX調用將返回請求的狀態。但是,異步它將返回之前它從服務器接收任何東西。

爲了給出一個簡單的答案,說明什麼函數會隨着時間的推移重複出現,你認爲setInterval可以解決你的問題。 setInterval可以提供(有點問題的)重複,不像setTimeout執行一次。

再次,您需要在您的代碼中建立一個模式,它將使用setTimeout作爲您AJAX回調中的延續。