2013-02-08 69 views
0

我有一個代碼。jquery不要在同一時間運行兩次相同的函數

setInterval(somefunc, 1000); 

function somefunc() { 
    curid = $(".chat-message:last").attr("id"); 
    $.post("http://blah.com/blah.php&last_msg_id=" + curid, function (data) { 

     $('.chat-messages').append(data); 
    }); 
} 

function saveChat() { 
    var texts = $('#chatText').val(); 

    var request = $.ajax({ 
     type: "POST", 
     url: "http://blah.com/submit.php", 
     data: { 
      text: texts 
     }, 
     dataType: "html" 
    }); 

    request.done(function (msg) { 
     somefunc(); 
    }); 
} 

的問題是,有時saveChat是在相同的時間間隔執行,並且信息somefunc追加到.chat的消息副本。我怎麼能避免它?我需要一個函數,只有當以前的somefunc()執行完成時才允許再次執行函數somefunc()。或者只是不允許同時執行兩次函數somefunc()。

+0

我認爲這將是最好重新考慮你的概念。 – kidwon 2013-02-08 16:49:04

+0

在javascript中,同時沒有任何事情發生,它是單線程的。 – 2013-02-08 16:52:10

+0

但jquery的速度不夠快,無法在somefunc重新啓動之前追加數據。 – 2013-02-09 09:20:13

回答

5

不要使用setInterval,但窩setTimeout

setTimeout(somefunc, 1000); 
function somefunc() { 
    //snip 
    $.post().done(function() { setTimeout(somefunc, 1000); }); 
} 
相關問題