timer+jquery

H2
На сайте с 07.02.2012
Offline
21
533

привет народ, проблема такая:

при обходе по таймеру не срабатывают jquery и js функции для элемента, но через alert в этом же таймере функции работают.

думаю проблема в видимости переменных|асинхронности|неведомые силы js/jquery

код:


can_get=0;
gotovo=0;
zip_name="";
$("#tracks_need").text(ar);
tracks_add=$("#tracks_add");
$("#status_arch").everyTime(2000, "timer_zip", function(i){
tracks_add.html(gotovo);
for(b=0;b<tracks.length;b++){
if(can_get<1){
if(tracks.post<1){
tracks.post=2;
can_get=2;
$.post("/ajax/do/get_zip/",{"track":tracks, "hash":hash,},function(data){can_get=0; gotovo++; json=JSON.parse(data); zip_name=json.key;});
}
}
}
if(gotovo==tracks.length){location.href="/temp/"+zip_name+".zip"; $("#status_arch").stopTime("timer_zip");}
});

смысл таков: каждые 2 секунды мы проверяем, можно ли отправить запрос на сервер, если да отправляем его, если нет, ждём ответа от сервера и разрешаем новый запрос, при каждом получении ответа увеличиваем значение переменной gotovo, это срабатывает, но это значение не присваивается в текст/хтмл элемента $("#tracks_add").

Пробовал как setInterval так и доп.библу timers (jquery), работают одинаково, результат тоже...

Элемент $("#tracks_add") существует на странице с её загрузки, т.е. не подгружая его. Вне таймера всё работает.

EA
На сайте с 15.06.2006
Offline
70
#1

наверно tracks_add в функции вообще не видно. попробуй объявить ее через var

var tracks_add=$("#tracks_add"); да и остальные переменные тоже

H2
На сайте с 07.02.2012
Offline
21
#2
e-art:
наверно tracks_add в функции вообще не видно. попробуй объявить ее через var

var tracks_add=$("#tracks_add"); да и остальные переменные тоже

Сейчас пытался объявить переменные как в самом таймере, так и перед ним, либо работает, но не как надо, либо вообще не работает...

[Удален]
#3

http23, попробуйте весь вывод вынести во внешние функции с передачей параметров в эту функцию что изменить и где изменить

P.S. внутри функциях $.get $.post $.ajax, если они находятся в цикле есть сложности с видимостью и доступностью внешних переменных

siv1987
На сайте с 02.04.2009
Offline
427
#4

console.log() вам в помощь

А вообще, по умолчанию ajax запросы выполняются асинхронно, это означает что скрипт (ваш цикл) выполняется дальше не дожидаясь ответа сервера. Отсюда и якобы "работает не так как надо"

H2
На сайте с 07.02.2012
Offline
21
#5

спасибо ребят, сейчас вроде стало легче решить проблему.

при ответе от сервера вызываю ф-ию, в неё передаю переменную

ф-ия:


function set_status(load){
alert(load);
$("#tracks_add").text(load);
}

алерт выдаёт полученную переменную, но текст элемента не меняется...

этот элемент на странице один, существует на ней с самой загрузки страницы (не подгружая)


alert($("#tracks_add").parent().attr("id")); // работает
дани мапов
На сайте с 06.09.2012
Offline
204
#6
http23:
спасибо ребят, сейчас вроде стало легче решить проблему.
при ответе от сервера вызываю ф-ию, в неё передаю переменную
ф-ия:

function set_status(load){
alert(load);
$("#tracks_add").text(load);
}

алерт выдаёт полученную переменную, но текст элемента не меняется...
этот элемент на странице один, существует на ней с самой загрузки страницы (не подгружая)

alert($("#tracks_add").parent().attr("id")); // работает

А что за элемент то? Не input ?

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
H2
На сайте с 07.02.2012
Offline
21
#7
дани мапов:
А что за элемент то? Не input ?

нет, разобрался в чём была проблема...

статус загрузки отображался в попап окне, а значение изменялось в его шаблоне (скрыт в подвале сайта)

извиняюсь :o

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий