Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2014, 13:49
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

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

// 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"?





сори если не в тот раздел..
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2014, 14:41
Аватар для hfts_rider
Профессор
Отправить личное сообщение для hfts_rider Посмотреть профиль Найти все сообщения от hfts_rider
 
Регистрация: 26.01.2014
Сообщений: 181

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

}

var intervalID = setInterval(load_new_msg, 5000);
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2014, 16:29
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

Сообщение от cOAPerator
уничтожить полностью предыдущую запущеную функцию "load_new_msg"?
В этой предыдущей id выставлен в intervalID? Т.е. имена совпадают?
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2014, 17:33
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

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

}

var intervalID = setInterval(load_new_msg, 5000);
я так пробовал, не работает, пишет Uncaught ReferenceError: intervalID is not defined
и кстати сама функция вообще не выполняется на 1000 ставил

Сообщение от newobject Посмотреть сообщение
В этой предыдущей id выставлен в intervalID? Т.е. имена совпадают?
да, имена совпадают, выставлен, но не работает, функция продолжает выполняться.

Последний раз редактировалось cOAPerator, 14.07.2014 в 17:55.
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2014, 18:45
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

Сообщение от cOAPerator
да, имена совпадают, выставлен, но не работает, функция продолжает выполняться.
Выложи сюда другую функцию, ту, где первый setInterval определен.
Ответить с цитированием
  #6 (permalink)  
Старый 15.07.2014, 09:48
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
как мне остановить/уничтожить полностью предыдущую запущеную функцию
Чо?
Цитата:
с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);
    
}
Ответить с цитированием
  #7 (permalink)  
Старый 15.07.2014, 11:01
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

Сообщение от Erolast
еще даже не объявлена
Возможно она объявлена у него в другой функции. Если бы она была не объявлена, программа бы падала в этом месте. Надо код смотреть.
Сообщение от Erolast
хранить идентификатор таймера в глобальном пространстве, а не внутри функции:
У него он и так в глобале.
Ответить с цитированием
  #8 (permalink)  
Старый 15.07.2014, 11:21
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

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
Ответить с цитированием
  #9 (permalink)  
Старый 15.07.2014, 15:27
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

Сообщение от Erolast Посмотреть сообщение
Чо?

А что, по-твоему, тут должно произойти? На момент вызова 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
Ответить с цитированием
  #10 (permalink)  
Старый 15.07.2014, 15:41
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

Вот полный скрипт:
// 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);
	
}

Последний раз редактировалось cOAPerator, 15.07.2014 в 15:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить 4 одинаковых функции Batyabest Общие вопросы Javascript 2 21.12.2013 22:53
как остановить функцию? vladimir7517 jQuery 10 11.10.2013 13:17
Остановить выполнение функции внутри другой функции ami_moor Общие вопросы Javascript 4 17.09.2013 14:02
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как временно запретить вызов функции? Dazar Общие вопросы Javascript 9 02.09.2012 22:52