Проблемы с setTimeout()....
Добрый день!
Пишу штуку работающею по 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: не вызвается.!!! |
setTimeout(function() { SendReq.call(link, dict[i]); }, tm); |
не работает!!!!:(
|
Вот даже примитивный скрипт сразу выдает "с"
<html> <head> [JS] 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); } } [/JS] </head> <body> <form> <input type="button" value="Start count!" onClick="timedCount(0)"> <input type="text" id="txt"> </form> </body> </html> |
Цитата:
setTimeout(function() { SendReq.call(window, link, dict[i]); }, tm); А так? |
Так тоже не работает, елки палки, что я уже не пробовал....
|
каждые три секунды? я думал setTimeout это типа таймер который выполняется только раз!?.
|
Попробуй setInterval что-ли...
|
Цитата:
потом только не забудь убрать |
Все выше перечисленное попробовал в разных вариация и плюс своего, результат тот же, паузы нет!!! Максимум что можно добиться это задержка перед первой отправкой, а дальше все!!! Может передать масив в php и там sleep()'ами по одному значению делать... фиг его знает буду что-то выдумывать.
|
Цитата:
<!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> |
а если так
for(var i=0; i<dict.length; i++){ tm += 3000; (function ( url, burl, time ) { setTimeout(function(){ SendReq( url, burl ); }, time); }) (link, dict[i], tm) } |
Цитата:
|
ksa, не я, а автор вопроса, просто подумал, что возможно оно не работает из-за отсутствия замыкания в цикле
|
setTimeout() должен "сам определять" следующую итерацию, а не какой-то цикл. Обращение "вы" не совсем к тебе... :) А ко всем так делающим.
|
ksa, ну это как раз понятно, кто хоть раз писал анимацию про это должен знать:)
|
Вобщем через PHP не как потому, что сколько ты пауз в нем не ставь результат вернется весь после обработки!!! А мне нужно что бы результат возвращался поэтапно, блин.
|
Цитата:
|
Panter7777,
не суй запросы к серверу в циклы. Сервер не будет отвечать с твоими задержками, сначала получи ответ от сервера, а потом отправляй новый запрос. |
Ура!!! Поборол)))
Всем огромнейшее спасибо!!! Вот код кому интересно пауза в массиве при работе через 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> |
$('#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 перестают подсвечиваться в другом моусентере Что здесь не так и КАК это сделать ,чтоб достичь задумки ? |
Часовой пояс GMT +3, время: 02:16. |