14.07.2014, 13:49
|
Аспирант
|
|
Регистрация: 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"?
сори если не в тот раздел..
|
|
14.07.2014, 14:41
|
|
Профессор
|
|
Регистрация: 26.01.2014
Сообщений: 181
|
|
Эм.. я так понял ты должен интервал после функции писать, что бы вышло:
function load_new_msg(){
if(...){
clearInterval(intervalID);
}
$.ajax({
// тут запрос
});
}
var intervalID = setInterval(load_new_msg, 5000);
|
|
14.07.2014, 16:29
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Сообщение от cOAPerator
|
уничтожить полностью предыдущую запущеную функцию "load_new_msg"?
|
В этой предыдущей id выставлен в intervalID? Т.е. имена совпадают?
|
|
14.07.2014, 17:33
|
Аспирант
|
|
Регистрация: 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.
|
|
14.07.2014, 18:45
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Сообщение от cOAPerator
|
да, имена совпадают, выставлен, но не работает, функция продолжает выполняться.
|
Выложи сюда другую функцию, ту, где первый setInterval определен.
|
|
15.07.2014, 09:48
|
|
Профессор
|
|
Регистрация: 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);
}
|
|
15.07.2014, 11:01
|
Профессор
|
|
Регистрация: 10.07.2014
Сообщений: 145
|
|
Сообщение от Erolast
|
еще даже не объявлена
|
Возможно она объявлена у него в другой функции. Если бы она была не объявлена, программа бы падала в этом месте. Надо код смотреть.
Сообщение от Erolast
|
хранить идентификатор таймера в глобальном пространстве, а не внутри функции:
|
У него он и так в глобале.
|
|
15.07.2014, 11:21
|
Профессор
|
|
Регистрация: 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
|
|
15.07.2014, 15:27
|
Аспирант
|
|
Регистрация: 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
|
|
15.07.2014, 15:41
|
Аспирант
|
|
Регистрация: 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.
|
|
|
|