2014-03-04 70 views
0
var F = function() { 
    $.ajax({ 
     . 
     . 
     . 
    }) 
    .done(function() { 
     console.log('Hey, I am done'); 
     setInterval(F, 10000); 
    }); 
} 

所以我想每10秒更新一些東西。問題是每次調用ajax調用本身都會調用兩次。所以輸出:隨後阿賈克斯通話延遲

Hey, I am done //First call (without delay) 

// After 10 seconds 
Hey, I am done 

// After 20 seconds 
Hey, I am done 
Hey, I am done 

// After 30 seconds 
Hey, I am done 
Hey, I am done 
Hey, I am done 
Hey, I am done 

並繼續...... 我清楚地失去了一些東西!任何人都可以啓發我嗎?

+2

的額外的行,您應該在'.done使用'setTimeout'()'或'的setInterval(F)'回調之外。 – pawel

+0

哦,謝謝大家,我只能「接受」一個答案,所以我「接受」第一個答案 – Masterakos

回答

3

不要使用間隔,使用超時:

setTimeout(F, 10000); 

BTW,你應該把它的完整,沒有成功:

.always(function() { 
     setTimeout(F, 10000); 
    }); 
1

這是因爲你是創建隊列的時間間隔對F的請求每次增加1。請嘗試setTimeout。

1

只需添加上的代碼

done(function() { 
      console.log('Hey, I am done'); 
      clearInterval(F); // clear the interval F 
      setInterval(F, 10000); //reset the interval F 
     }); 
+0

F是一個引用函數,你不清楚這裏的間隔 –