2013-04-07 82 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回调中的延续。