2013-02-08 4 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

+0

В javascript ничего не происходит в одно и то же время, оно однопоточное. –

+0

, но jquery недостаточно быстрый, чтобы добавлять данные до того, как somefunc снова запустится. –

ответ

5

Не используйте setInterval, но гнездо setTimeout:

setTimeout(somefunc, 1000); 
function somefunc() { 
    //snip 
    $.post().done(function() { setTimeout(somefunc, 1000); }); 
} 
Смежные вопросы