2012-02-19 90 views
0

我想要做以下應用程序:如何在JavaScript中使用計時器?

1)我想使用ajax檢索消息。 (Jquery的)

2)當我閱讀消息 - 我要等待10秒,以檢索下一個消息

3)然後等待10秒鐘,以檢索下一個消息

4)的所有行在數據庫中。

如何在這種情況下使用計時器?

如何啓動然後停止計時器?

function loadMessage(user_id) 
    { 
     $.post('ActionScripts/Message.php',{ 
      user_id: user_id 
     }, function(data) { 

    //data 

      },"json"); 
    } 

回答

4
function loadMessage(user_id) 
    { 
     $.post('ActionScripts/Message.php',{ 
      user_id: user_id 
     }, function(data) { 

      //data 
      setTimeout(function(){loadMessage(user_id); }, 10000); 

      },"json"); 
    } 
+1

如果請求超時或失敗,這將打破函數鏈... – shaun5 2012-02-19 04:42:30

0

下實現調用關閉服務器並執行每10秒:

function loadmessage (user_id) { 
    $.post('ActionScripts/Message.php', { 
     user_id: user_id 
    }, function (data) { 

     //data 
    }, "json"); 
} 
var interval = setInterval(function() { loadmessage(5345) }, 10000); 

要停止計時使用clearInterval

clearInterval(interval); 

要重新啓動計時器重新initializeinterval變量:

var interval = setInterval(function() { loadmessage(5345) }, 10000); 
1

我喜歡調用以前的(不與10000區間爲重要)完成後的下一個Ajax請求,但你必須打電話給下一個即使第一失敗...

function loadMessage(user_id) { 
    $.ajax({ 
    type: "POST", 
    url: 'ActionScripts/Message.php', 
    data: { user_id: user_id } 
    dataType: 'json', 
    async: true, 
    cache: false, 
    timeout:30000, 
    success: function(data){ 
     // do what you need with the returned data... 
     setTimeout(function(){loadMessage(user_id); },10000); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     //do what you want with the error 
     setTimeout(function(){loadMessage(user_id); },10000); 
    } 
    }); 
} 
+0

此外,將try {} catch {}中的所有數據處理封裝也是一個好主意,因爲錯誤也會阻止函數鏈。 .. – shaun5 2012-02-19 04:47:10

+0

使用匿名函數而不是將它留給解析器來確定'loadmessage(user_id)'更好。 – jcolebrand 2012-02-28 18:32:29

+0

我同意。我不明白它是如何開始的,但我犯了這個罪...... – shaun5 2012-02-28 23:50:20

相關問題