Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Рекурсивный вызов функции с задержкой (https://javascript.ru/forum/jquery/20952-rekursivnyjj-vyzov-funkcii-s-zaderzhkojj.html)

gv0zd 23.08.2011 21:12

Рекурсивный вызов функции с задержкой
 
Есть своя CMS, есть рассылка почты клиентам.
Ранее рассылка была реализована пачками по 50 адресов, новая пачка вызвалась за счет

<meta http-equiv="Refresh Content="3; URL=./dir/">


Захотел это сделать ассинхронно. прикрутить красивый прогрессбар
Важный момент, между обращения к скрипту должна быть пауза в 3 сек. Чтоб не перегружать почтовик

$("document").ready(function() {
    function sendMails () {
		$action = $('#action').val();
		
        $.ajax({ 
            type: "POST", 
            dataType: "json", 
            cache: false, 
            url: '?action='+$action+'&subaction=ajax', 
            timeout: 25000, 
            error: function() { 
	            alert ('Ошибка');
            }, 
            success: function(data) {
		    	if (data.result == 'ok' && $(data.data).size()) {
			        $('#sent').text(data.data.sent);
				$('#remain').text(data.data.remain);
				$('#percents').text(data.data.percents);
				$('#errors').text(data.data.errors);
                                setTimeout(sendMails(),30000);					
    		    }
				else if (data.result == 'finished') {
					alert ('Все сделано');
				}
            } 
        }); 
	}
	sendMails();
});

Работает рекурсивно, но задержек между ответом сервера и новым обращением нет.

Уже повсякому прокрутил это скрипт.
В Javascript не силен. Перегуглил все подряд.

Так как не полуается, уже склоняюсь к тому чтоб паузу сделать на стороне php. Но хотелось бы все-таки в javascript

B@rmaley.e><e 23.08.2011 21:20

0. А зачем здесь client-side? Коль скоро почту Вы рассылаете каким-нибудь серверным скриптом, какой смысл в клиентском коде?
1.
Цитата:

Сообщение от gv0zd
Работает рекурсивно, но задержек между ответом сервера и новым обращением нет.

А чего Вы ещё ожидаете, вызывая функцию прямо после ответа
Цитата:

Сообщение от gv0zd
 setTimeout(sendMails(),30000);    

Следовало написать
setTimeout(sendMails,3000);

gv0zd 23.08.2011 23:09

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 121986)
0. А зачем здесь client-side? Коль скоро почту Вы рассылаете каким-нибудь серверным скриптом, какой смысл в клиентском коде?

Серверного решения быстро не нашел в свое время, поэтому реализовал
Влоб, сейчас решил чуть обкрасивить :)

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 121986)
1. А чего Вы ещё ожидаете, вызывая функцию прямо после ответаСледовало написать
setTimeout(sendMails,3000);

Семен Семеныч!!!!
Спасибо. Все работает

Smile 12.08.2012 23:23

Не выполняет рекурсивный вызов функции
 
Кто знает в чем проблема?

$(document).ready(function(){
function calc(i){
alert(i);
i++;
calc(i);
}
calc(0);
});

В php таким способом можно организовать рекурсивный вызов функции, а в jQuery ну ни как не работает.

Deff 12.08.2012 23:36

Smile, :blink:
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){
 function calc(i){
 alert(i);
 i++;
 calc(i);
 }
 calc(0);
 });
</script>


Ecть подозрение - что есть кривое использование на странице (до скрипта с вызовом рекурсии ) конструкции
$(document).ready(function(){
Рекурсивный скрипт ставьте в самый конец страницы


Попробуйте убрать подобные конструкции до данного скрипта и ставить их по одному и наблюдать

Smile 14.08.2012 12:49

спасибо за совет
 
Спасибо за совет :)

Вроде разобрался. Написал вот карусель с отслеживанием события hover, over стопорит карусель, out запускает. Знаю, что такое уже давно используется во всякого рода plag-in, хотелось вот самому допереть.
Кому интересно, вот что получилось:

http://smile.gid-interior.ru/btimes/


Часовой пояс GMT +3, время: 13:14.