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 15.07.2014 15:53

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

Erolast 15.07.2014 16:55

Цитата:

Uncaught ReferenceError: intervalID is not defined
А, тьфу, вот так:
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
     
    if (window.intervalID)
        сlearInterval(window.intervalID)
  
    window.intervalID = setInterval(function() {
          
        $.ajax({
 
        });
          
    }, 5000);
     
}

Но лучше intervalID переназвать как-нибудь по-нормальному.

newobject 15.07.2014 17:25

Цитата:

Сообщение от cOAPerator
if (intervalID)
сlearInterval(intervalID)

window.intervalID = setInterval(function() {

Попробуй в этом вот куске заменить все intervalID на window.intervalID.

Или создай пустой объект ob={} (перед вызом функции, в глобальной области) и замени все window.intervalID и intervalID на ob.IntervalID

newobject 15.07.2014 17:39

Цитата:

Сообщение от Erolast
А я типа что-то другое предложил?

Я просто не видел, я отвечал на сообщение на предыдущей странице.:)

newobject 15.07.2014 17:49

Erolast,
Но я все равно не врубаюсь, как его код мог работать. Я не увидел в этом куске, где объявлен intervalID кроме этой самой функции, о которой разговор. Так почему же она у него не падает с ошибкой при первом же вызове? Значит intervalID должен быть где-то еще объявлен, правильно?

cOAPerator 15.07.2014 18:02

Цитата:

Сообщение от Erolast (Сообщение 321177)
А, тьфу, вот так:
function load_new_msg(dialog_sender_id,dialog_receiver_id,dialog_pid,dialog_offset){
     
    if (window.intervalID)
        сlearInterval(window.intervalID)
  
    window.intervalID = setInterval(function() {
          
        $.ajax({
 
        });
          
    }, 5000);
     
}

Но лучше intervalID переназвать как-нибудь по-нормальному.

название intervalID я поменял на другое, более понятное.
и да заработало, но правда пишет при загрузке ошибку ReferenceError: \u0441learInterval is not defined

но теперь другая проблема встала, как удалить все переменные dialog_sender_id,dialog_receiver_id,dialog_pid,dia log_offset
перед загрузкой load_new_msg ?
просто присвоить им всем NULL ?
и наверное придется делать их глобальными, чтобы всегда одни и те же использовались?

правда как их уничтожить я не знаю, они у меня через var объявлены




Цитата:

Сообщение от newobject (Сообщение 321184)
Erolast,
Но я все равно не врубаюсь, как его код мог работать. Я не увидел в этом куске, где объявлен intervalID кроме этой самой функции, о которой разговор. Так почему же она у него не падает с ошибкой при первом же вызове? Значит intervalID должен быть где-то еще объявлен, правильно?

тут посмотри поймешь почему при 1 вызове нет ошибки
http://javascript.ru/forum/events/48...tml#post321166

newobject 15.07.2014 18:28

cOAPerator,
Я смотрел. У тебя первый запуск этой функции идет из

success: function(data){
29 data = JSON.parse(data);
30 $('#im_content_wrap').empty();
31 $('#im_content_wrap').append('<div id="im_content" style="">'+data.dataArray+'</div>');
32 animateToNewMsg();
33
34 // тут вызывается загрузка новых сообщений
35 load_new_msg(dialog_sender_id,dialog_receiver_id,d ialog_pid,dialog_offset);
36
37 }

До этого intervalID нигде не определен. Из ифа идет обращение к неопределенной переменной. На этом месте должна генерироваться ошибка. Может у тебя он определен в animateToNewMsg?

cOAPerator 15.07.2014 18:38

Цитата:

Сообщение от newobject (Сообщение 321189)
cOAPerator,
До этого intervalID нигде не определен. Из ифа идет обращение к неопределенной переменной. На этом месте должна генерироваться ошибка. Может у тебя он определен в animateToNewMsg?

нет там только анимация, 1 строка и все.
при первом вызове не вызывается intervalID, он вызывается после того как отрабатывает функция load_new_msg, вот тогда и выходит ошибка 1 раз.
но это не важно.

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

Erolast 15.07.2014 18:46

Цитата:

Erolast,
Но я все равно не врубаюсь, как его код мог работать. Я не увидел в этом куске, где объявлен intervalID кроме этой самой функции, о которой разговор. Так почему же она у него не падает с ошибкой при первом же вызове? Значит intervalID должен быть где-то еще объявлен, правильно?
Я решил, что он как раз падает.
Цитата:

и да заработало, но правда пишет при загрузке ошибку ReferenceError: \u0441learInterval is not define
Перепиши заново clearInterval, у тебя там с русская.

Цитата:

надо как то уничтожить переменные все что попадают в функцию. я выше писал какие.
Зачем? Переменные уничтожит сборщик мусора сразу после того, как к ним потеряется доступ, то есть, после остановки замкнувшего их интервала.

cOAPerator 15.07.2014 18:53

Цитата:

Сообщение от Erolast (Сообщение 321194)
Зачем? Переменные уничтожит сборщик мусора сразу после того, как к ним потеряется доступ, то есть, после остановки замкнувшего их интервала.

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

пробовал удалять/обнулять/перезаписывать
все равно остаются те значения которые попали при загрузке страницы

UPD: странно заработало удаление переменных вот такое:

dialog_sender_id = null;
dialog_receiver_id = null;
dialog_pid = null;
dialog_offset = null;

а до этого несколько раз перезагружал страницу, показывало всегда одинаковое значение в них.


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