2011-09-14 38 views
0

我有這個簡單的腳本,一直取笑我:jQuery的GET/AJAX的一再要求下呈現響應雙重每次

var latest; 

function populate(){ 
    $.get('lib/log.php?action=update&latest='+latest, function(data) { 
     if(data.id!=latest){ 
      latest = data.id; 
      $(data.news).hide().prependTo('#tabul').slideDown("slow"); 
     } 
    },"json") 
    setInterval(populate,5000); 
    }; 

populate(); 

- 每次請求觸發它檢索HTML的單行線,但它一直增加它以前的反應,所以它走1線,2線,4線,8,16 ..等等..瀏覽器(和帶寬)變得瘋狂...

爲什麼呢?我錯過了什麼,我怎麼才能讓它僅僅只用一行。

在此先感謝

安德烈亞斯

+0

請發佈您從服務器獲取的JSON響應。 – bstakes

回答

0

您應該使用setTimeout代替setInterval

+0

我同意Arnaud,這個問題是你的問題的一個很好的資源:http://stackoverflow.com/questions/729921/settimeout-or-setinterval – Blazemonger

0

即使在5秒後AJAX響應可能沒有完成,SetInterval也會被觸發,我可以推薦您在slideDown新內容後使用setTimeout嗎?

function populate(){ 
    $.get('lib/log.php?action=update&latest='+latest, function(data) { 
     if(data.id!=latest){ 
      latest = data.id; 
      $(data.news).hide().prependTo('#tabul').slideDown("slow"); 
     } 

     setTimeout(populate,5000); 
    },"json") 
}; 

populate(); 
0

也許我在誤讀某些東西......但是您的Populate函數每次運行時都會添加另一個setInterval。所以每執行一次它就會運行一次。