2013-01-25 89 views
1

當我最初加載頁面時,需要在30秒內調用一個函數。此後應該在60秒內自動調用。使用setTimeout和setInterval

我做什麼,

<html> 
    <head> 
    </head> 
    <body> 
    <script> 
     setTimeout('ajaxload()',30000); 
     setInterval('ajaxload()',60000); 
     function ajaxload() 
     { 
     //code 
     } 
    </script> 

    </body> 
    </html> 

但功能被稱爲不規則的時間,我想。我做得對嗎?如果有任何錯誤好心分享....

+0

秒被稱爲使用php代碼。我沒有共享簡化代碼。 –

+0

如何不規則?目前,它會在30,60,120,180 ...這樣稱呼它,讓它更小的數字,以便您可以確認?另外,最好寫'30 * 1000',30k不壞,但特別是數字越大,它就越難讀。這聽起來像你可能已經檢查過,但你確定PHP代碼是正確的? – Raekye

+2

順便說一句,您的結束''標籤出錯了,應該在''之前。 – Marty

回答

2

。如果第一個在30秒,然後在60秒,你應該按順序進行。

setTimeout(startAjaxLoad,30000); 

function ajaxload() 
{ 
    //code 
} 

function startAjaxLoad() 
{ 
    ajaxload(); 
    setInterval(ajaxload,60000); 
} 
+0

謝謝...它的工作原理! –

6

不要傳遞字符串..傳遞函數名/聲明本身:您正在使用有點不正確

setTimeout(function() { 
    ajaxload(); 
    setInterval(ajaxload, 60000); 
}, 30000); 
+2

這絕對是正確的迴應。正確使用setTimeout和setInterval以及使用匿名函數而不是字符串。 我只想將setInterval賦值給一個變量,以便稍後取消,如果需要的話。 – BBagi

+0

良好的編碼和優化...偉大的工作 – ravisoni

0

變化

setTimeout(function(){ajaxload()},30000); 
setInterval(function(){ajaxload()},60000); 
function ajaxload() 
     { 
     //code 
     } 
+1

沒有必要使用匿名函數。您可以直接將ajaxload作爲參考傳遞給這裏,但這並不能解決任何問題。 – jfriend00

+0

@ jfriend00也許問題是關閉標籤:) – Cris

0

如果你要不斷地調用一個AJAX方法,通過等待它,然後再簡單地再次使用setTimeout()結束,我會考慮的東西整潔一點。

function ajaxload() 
{ 
    $.ajax({ 

     // AJAX Settings. 
     // ... 

     complete: function() 
     { 
      // Call .ajaxload() 60 seconds from the completion of this request. 
      setTimeout(ajaxload, 60000); 
     } 

    }); 
} 



// Initial call. 
setTimeout(ajaxload, 30000);