Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите, где может быть ошибка? (https://javascript.ru/forum/misc/28814-pomogite-gde-mozhet-byt-oshibka.html)

keysi_ 03.06.2012 19:15

Помогите, где может быть ошибка?
 
Вложений: 1
Есть веб интерфейс программы, обновление данных происходит по AJAX. Это интерфейс телефонного оператора, он там смотрит историю звонков и сохраняет номера. Скажу что за некоторые методы, которые я использовал в коде, стыдно, но я не гуру JS и раньше моих знаний хватало, а тут нагрузка по больше и полезли ошибки. В частности, переполнение стека (Uncaught RangeError: Maximum call stack size exceeded пишет Chrome), но я даже не понимаю как отследить эту ошибку, браузер очень скудно выдает информации (любой), пришел к мысли, что дело в логике, все переписывать на данный момент нет времени, сроки горят, а система уже запущена.
Код прикрепляю:

Deff 03.06.2012 19:34

Похоже трабл кроется вот в этой функции
function sendauto(){
  var locked=document.getElementsByName('locked')[0].value;
  if (locked!='yes'){ // блокировка автомата , чтобы не ускорялся
    document.getElementsByName('locked')[0].value='yes';
    var iquery=parseInt(document.getElementsByName('iquery')[0].value);
    if (iquery>44000){ location.reload(); return false;} // обновление страницы раз в 4 часа, на всяк случай
    setTimeout (function(){start()},100);
  }else sendauto();//setTimeout (function(){sendauto();},1000);
}

В частности в локальном режиме она рекурсивно себя вызывает до бесконечности
Второе Рекурсивный вызов таймера в ней же функции старт - , А что одной инициализации start() на всё - про всё не хватает ?
Собственно - эт быстро мысли - на счёт куда рыть..

keysi_ 03.06.2012 19:40

Цитата:

Сообщение от Deff (Сообщение 178538)
В частности в локальном режиме она рекурсивно себя вызывает до бесконечности

Но ведь она должна постоянно проверять сервер на поступление новых данных, или в JS есть какой-то другой способ это сделать?
Цитата:

Сообщение от Deff (Сообщение 178538)
Второе Рекурсивный вызов таймера в ней же функции старт - , А что одной инициализации start() на всё - про всё не хватает ?

Исходя из предыдущего, мне необходимо и при каждом вызове проверять таймер, ведь сама переменная без проверки не изменится же, верно?

Deff 03.06.2012 19:45

keysi_,
Почему не делать это в одной функции ?? Если завсегда одна - Вызывает другую ?

У метода Aякс загрузки должен быть саllback - завершения(удачного/неудачного, но конца) - из него и запускать следующее деяние, если данных нет, запускаем через проверочный интервал (думаю порядка 1/10 между временем обновления данных

keysi_ 03.06.2012 19:53

Цитата:

Сообщение от Deff (Сообщение 178542)
У метода Aякс загрузки должен быть саllback - завершения(удачного/неудачного, но конца) - из него и запускать следующее деяние, если данных нет, запускаем через проверочный интервал (думаю порядка 1/10 между временем обновления данных

Это чтож мне для проверки саllback еще один бесконечный цикл запускать?

Deff 03.06.2012 19:55

Цитата:

Сообщение от keysi_
Это чтож мне для проверки саllback еще один бесконечный цикл запускать?

Хм - Вы как раз забиваете после запуска Aякс на функцию и выходите из нее
А в саllback - проверяете результат - и запускаете - Таймер повторного запроса или же обработку результата и ток потом таймер


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