Просмотр полной версии : Проблемы с setTimeout()....
Panter7777
21.06.2011, 16:49
Добрый день!
Пишу штуку работающею по ajax передаю список через textarea потом javascripto'm разбиваю его по строчно и создаю массив. Дальше нужно бегу по массиву и вызываю другую функцию с переменными из массива. Только вызвать мне ее нужно через определенный интервал времени.
Вот код:
function SplitURL(){
var dict = new Array();
var link = document.getElementById('link').value;
var back_url = document.getElementById('back_url').value;
dict = back_url.split("\n");
var tm = 0;
for(var i=0; i<dict.length; i++){
tm += 3000;
setTimeout("SendReq(" + link + "," + dict[i] + ");", tm);
}
}
function SendReq(link, back_url){
alert(1);
}
Тоесть еденицка должна вызываться каждые 3 секунды но нет :nono: не вызвается.!!!
DreamTheater
21.06.2011, 17:27
setTimeout(function() {
SendReq.call(link, dict[i]);
}, tm);
Panter7777
21.06.2011, 17:46
не работает!!!!:(
Panter7777
21.06.2011, 17:58
Вот даже примитивный скрипт сразу выдает "с"
<html>
<head>
var dict = new Array();
dict = new Array("a", "b", "c");
function timedCount(i){
while (i<dict.length){
document.getElementById('txt').value=dict[i];
i += 1;
setTimeout("timedCount(" + i + ")",2000);
}
}
</head>
<body>
<form>
<input type="button" value="Start count!" onClick="timedCount(0)">
<input type="text" id="txt">
</form>
</body>
</html>
DreamTheater
21.06.2011, 18:30
не работает!!!!:(
setTimeout(function() {
SendReq.call(window, link, dict[i]);
}, tm);
А так?
Panter7777
21.06.2011, 18:41
Так тоже не работает, елки палки, что я уже не пробовал....
Bebarr Swallow
21.06.2011, 19:54
каждые три секунды? я думал setTimeout это типа таймер который выполняется только раз!?.
yashka525
21.06.2011, 20:58
Попробуй setInterval что-ли...
через определенный интервал времени.
ну так через интервал и сделай
потом только не забудь убрать
Panter7777
22.06.2011, 12:00
Все выше перечисленное попробовал в разных вариация и плюс своего, результат тот же, паузы нет!!! Максимум что можно добиться это задержка перед первой отправкой, а дальше все!!! Может передать масив в php и там sleep()'ами по одному значению делать... фиг его знает буду что-то выдумывать.
Все выше перечисленное попробовал в разных вариация и плюс своего, результат тот же, паузы нет!
Твая не умеет пользоваться setTimeout()... :)
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style type="text/css">
</style>
<script type="text/javascript">
function Go() {
setTimeout(function(){Inc(0)},100)
}
function Inc(N) {
document.getElementById('n').innerHTML=N
N++
if (N<11) setTimeout(function(){Inc(N)},400)
}
</script>
</head>
<body onload='Go()'>
<div id='n'></div>
</div>
</body>
</html>
nikita.mmf
22.06.2011, 12:11
а если так
for(var i=0; i<dict.length; i++){
tm += 3000;
(function ( url, burl, time ) {
setTimeout(function(){
SendReq( url, burl );
}, time);
}) (link, dict[i], tm)
}
а если так
Зачем вы setTimeout() суёте в циклы? :blink:
nikita.mmf
22.06.2011, 12:15
ksa, не я, а автор вопроса, просто подумал, что возможно оно не работает из-за отсутствия замыкания в цикле
setTimeout() должен "сам определять" следующую итерацию, а не какой-то цикл. Обращение "вы" не совсем к тебе... :) А ко всем так делающим.
nikita.mmf
22.06.2011, 12:25
ksa, ну это как раз понятно, кто хоть раз писал анимацию про это должен знать:)
Panter7777
23.06.2011, 12:40
Вобщем через PHP не как потому, что сколько ты пауз в нем не ставь результат вернется весь после обработки!!! А мне нужно что бы результат возвращался поэтапно, блин.
А мне нужно что бы результат возвращался поэтапно
Пример "поэтапного возвращения" я тебе показал...
Panter7777,
не суй запросы к серверу в циклы. Сервер не будет отвечать с твоими задержками, сначала получи ответ от сервера, а потом отправляй новый запрос.
Panter7777
23.06.2011, 16:52
Ура!!! Поборол)))
Всем огромнейшее спасибо!!!
Вот код кому интересно пауза в массиве при работе через Ajax:
<script type="text/javascript">
function tmp(link, dict){
if (dict.length > 0){
last = dict.pop();
SendReq(link, last);
setTimeout(function(){tmp(link, dict)}, 2000);
}
}
// Сначала берем из формы значения и создаем из них массив, потом через таймаут передаем его функции tmp которая берет последний элемент массива и передает его в функцию посылающею Ajax запрос на обработчик и так далее пока в массиве не кончаться элементы!!!
function Dict(){
var link = document.getElementById('link').value;
var back_url = document.getElementById('back_url').value;
var dict = new Array();
dict = back_url.split("\n");
setTimeout(function(){tmp(link, dict)}, 2000);
}
function SendReq(link, back_url){
var url = "link="+encodeURIComponent(link)+"&back_url="+encodeURIComponent(back_url);
// alert(url);
var zz = document.getElementById('result').innerHTML; //Для того что бы новые результаты добавлялись к старым
var req = new XMLHttpRequest();
req.onreadystatechange = function () {
if (req.readyState != 4) {
document.getElementById('result').innerHTML="Загружаю";
}
if (req.readyState == 4){
document.getElementById('result').innerHTML=zz + '</br>' + req.responseText;
}
}
req.open("POST", "check_url.php", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(url);
}
</script>
</head>
<form method="POST">
......
<button onclick="Dict(); return false">Ajax</button>
</form>
<div id="result">Результат</div>
Андрей38
05.09.2011, 10:38
$('#but div').live('mouseenter',function (){
var u= setInterval(function er () {
$('#apDiv1') .hide(456).show(567)
var hi = $(this).find('p:first').text()
var fi= $('#prom img').attr('src')
//alert(hi)
//alert(fi)
},900)
так НЕ работает if(hi==fi )// if (1==1) или (1==2) a так работает
{
clearInterval(u) }
})
Замысел в том,чтоб в заданные промежутки времени проверять,равен ли var hi var fi .А если вары стали равны,ОТКЛЮЧИТЬ проверку сэтинтервалом.
В этом коде алерты выдают ПРАВИЛЬНЫЕ значения ,НО if if (hi==fi) с переменными,которые выдает алерт, не хочет сравнивать .К тому-же,похоже, последующее задействие ИФ с переменными if (hi==fi)
вырубает $('#but div').live('mouseenter', в котором, ЗИС текст,так как зис-дивы в #but перестают подсвечиваться в другом моусентере
Что здесь не так и КАК это сделать ,чтоб достичь задумки ?
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot