我有一个代码。
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-messages重复。我怎么能避免它?我需要一个允许仅在somefunc()的先前执行完全完成时再次执行somefunc()函数的函数。或者只是不允许同时执行somefunc()函数两次。
答案 0 :(得分:5)
请勿使用setInterval
,而是嵌套setTimeout
:
setTimeout(somefunc, 1000);
function somefunc() {
//snip
$.post().done(function () { setTimeout(somefunc, 1000); });
}