Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как остановить работу функции? (https://javascript.ru/forum/events/48719-kak-ostanovit-rabotu-funkcii.html)

cOAPerator 14.07.2014 13:49

как остановить работу функции?
 
привет всем, подскажите пожалуйста

// AUTOLOAD NEW MESSAGE
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
	
	сlearInterval(intervalID) // НЕ работает

	intervalID = setInterval(function() {
		
		$.ajax({
			// тут запрос
		});
		
	}, 5000);
	
}


эта функция запускается другой функцией, как мне остановить/уничтожить полностью предыдущую запущеную функцию "load_new_msg"?





сори если не в тот раздел..

hfts_rider 14.07.2014 14:41

Эм.. я так понял ты должен интервал после функции писать, что бы вышло:
function load_new_msg(){
  if(...){
    clearInterval(intervalID);
  }
  $.ajax({
      // тут запрос
  });

}

var intervalID = setInterval(load_new_msg, 5000);

newobject 14.07.2014 16:29

Цитата:

Сообщение от cOAPerator
уничтожить полностью предыдущую запущеную функцию "load_new_msg"?

В этой предыдущей id выставлен в intervalID? Т.е. имена совпадают?

cOAPerator 14.07.2014 17:33

Цитата:

Сообщение от hfts_rider (Сообщение 321023)
Эм.. я так понял ты должен интервал после функции писать, что бы вышло:
function load_new_msg(){
  if(...){
    clearInterval(intervalID);
  }
  $.ajax({
      // тут запрос
  });

}

var intervalID = setInterval(load_new_msg, 5000);

я так пробовал, не работает, пишет Uncaught ReferenceError: intervalID is not defined
и кстати сама функция вообще не выполняется на 1000 ставил

Цитата:

Сообщение от newobject (Сообщение 321047)
В этой предыдущей id выставлен в intervalID? Т.е. имена совпадают?

да, имена совпадают, выставлен, но не работает, функция продолжает выполняться.

newobject 14.07.2014 18:45

Цитата:

Сообщение от cOAPerator
да, имена совпадают, выставлен, но не работает, функция продолжает выполняться.

Выложи сюда другую функцию, ту, где первый setInterval определен.

Erolast 15.07.2014 09:48

Цитата:

как мне остановить/уничтожить полностью предыдущую запущеную функцию
Чо?
Цитата:

сlearInterval(intervalID) // НЕ работает

А что, по-твоему, тут должно произойти? На момент вызова clearInterval переменная intervalID еще даже не объявлена.

Нужно остановить таймер при повторном вызове функции, так? Тогда тебе нужно хранить идентификатор таймера в глобальном пространстве, а не внутри функции:
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
    
    if (intervalID)
        сlearInterval(intervalID)
 
    window.intervalID = setInterval(function() {
         
        $.ajax({

        });
         
    }, 5000);
    
}

newobject 15.07.2014 11:01

Цитата:

Сообщение от Erolast
еще даже не объявлена

Возможно она объявлена у него в другой функции. Если бы она была не объявлена, программа бы падала в этом месте. Надо код смотреть.
Цитата:

Сообщение от Erolast
хранить идентификатор таймера в глобальном пространстве, а не внутри функции:

У него он и так в глобале.

newobject 15.07.2014 11:21

Erolast,
вот такой вариант возможен

fu1=function(){
id=setInterval(function(){console.log(1)}, 100)
setTimeout(fu2, 1000)
}
fu2=function(){
clearInterval(id)
id=setInterval(function(){console.log(2)}, 10000)
}

setTimeout(function(){clearInterval(id)}, 50000)
fu1()

1
1
1
1
1
1
1
1
1
2
2
2
2

cOAPerator 15.07.2014 15:27

Цитата:

Сообщение от Erolast (Сообщение 321103)
Чо?

А что, по-твоему, тут должно произойти? На момент вызова clearInterval переменная intervalID еще даже не объявлена.

Нужно остановить таймер при повторном вызове функции, так? Тогда тебе нужно хранить идентификатор таймера в глобальном пространстве, а не внутри функции:
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
    
    if (intervalID)
        сlearInterval(intervalID)
 
    window.intervalID = setInterval(function() {
         
        $.ajax({

        });
         
    }, 5000);
    
}

Uncaught ReferenceError: intervalID is not defined

cOAPerator 15.07.2014 15:41

Вот полный скрипт:
// LOAD DIALOG
$('a[id^="dialog_load_"]').on('click.namespace1', function(){

	var dial_lnk = $(this).attr('id').split("_");
	var dialog_sender_id = dial_lnk[2];
	var dialog_receiver_id = dial_lnk[3];
	var dialog_pid = dial_lnk[4];
	var dialog_offset = 3;

	$('#im_msg_box').empty();
	$('#im_msg_box').append('<div id="im_content_wrap" style="">'+
									'</div>'+
									'<div id="im_control_wrap" style="">'+
										'<div class="im_label"><img src="/content/avatars/noavatar.png"></div>'+
										'<div class="im_text">'+
											'<textarea id="msg_text" name="im_msg_new" placeholder="текст сообщения"></textarea>'+
										'</div>'+
										'<div class="im_send_btn">'+
											'<button type="submit" class="gl_btn post_submit">отправить</button>'+
										'</div>'+
									'</div>');
	
	$.ajax({
		type: 'post',
		url: '/library/im/im_handler.php',
		data: 'query_type=dialog_load&dialog_sender_id='+dialog_sender_id+
'&dialog_receiver_id='+dialog_receiver_id+'&dialog_pid='+dialog_pid,
		success: function(data){
			data = JSON.parse(data);
			$('#im_content_wrap').empty();
			$('#im_content_wrap').append('<div id="im_content" style="">'+data.dataArray+'</div>');
			animateToNewMsg();
			
			// тут вызывается загрузка новых сообщений
			load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset);
			
		}
	});

});


// AUTOLOAD NEW MESSAGE
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
	
	if (intervalID)
	  сlearInterval(intervalID)
  
    window.intervalID = setInterval(function() {
		
		$.ajax({
			type: "post",
			url: '/library/im/im_handler.php',
			data: 'query_type=message_autoload&dialog_sender_id='+dialog_sender_id+
'&dialog_receiver_id='+dialog_receiver_id+'&dialog_pid='+dialog_pid+'&dialog_offset='+dialog_offset,
			success: function(data){
				data = JSON.parse(data);
				//alert(data.dataArray);
			$('#im_content').append('<div style="">'+data.dataArray+'</div>');
				animateToNewMsg();
			}
		});
				
		animateToNewMsg();
		
	}, 5000);
	
}


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