Javascript.RU

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

Кстати, я пробовал еще один вариант, убрать полностью функцию load_new_msg и перенести ее на то место где вызывается она в 1 функции, результат тот же.
Ответить с цитированием
  #12 (permalink)  
Старый 15.07.2014, 16:55
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
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 переназвать как-нибудь по-нормальному.
Ответить с цитированием
  #13 (permalink)  
Старый 15.07.2014, 17:25
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

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

window.intervalID = setInterval(function() {
Попробуй в этом вот куске заменить все intervalID на window.intervalID.

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

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

Сообщение от Erolast
А я типа что-то другое предложил?
Я просто не видел, я отвечал на сообщение на предыдущей странице.
Ответить с цитированием
  #15 (permalink)  
Старый 15.07.2014, 17:49
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

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

Последний раз редактировалось newobject, 15.07.2014 в 17:53.
Ответить с цитированием
  #16 (permalink)  
Старый 15.07.2014, 18:02
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

Сообщение от Erolast Посмотреть сообщение
А, тьфу, вот так:
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 Посмотреть сообщение
Erolast,
Но я все равно не врубаюсь, как его код мог работать. Я не увидел в этом куске, где объявлен intervalID кроме этой самой функции, о которой разговор. Так почему же она у него не падает с ошибкой при первом же вызове? Значит intervalID должен быть где-то еще объявлен, правильно?
тут посмотри поймешь почему при 1 вызове нет ошибки
как остановить работу функции?

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

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

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

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

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

Цитата:
надо как то уничтожить переменные все что попадают в функцию. я выше писал какие.
Зачем? Переменные уничтожит сборщик мусора сразу после того, как к ним потеряется доступ, то есть, после остановки замкнувшего их интервала.
Ответить с цитированием
  #20 (permalink)  
Старый 15.07.2014, 18:53
Аспирант
Отправить личное сообщение для cOAPerator Посмотреть профиль Найти все сообщения от cOAPerator
 
Регистрация: 04.01.2012
Сообщений: 78

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

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

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

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

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить 4 одинаковых функции Batyabest Общие вопросы Javascript 2 21.12.2013 21: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