Пауза в each или управление шагами цикла?
Добрый день, господа.
Ситуация в этот раз примерно такая: Есть веб страница ссылками на внутренние странички. На внутренней страничке нажимается кнопка отправляющая ajax запрос на сервер и пользователь подписывается на раздачу. Я хочу сделать так, чтобы не надо было заходить на внутренние странички, а прямо с главной можно было возле каждой ссылки создать кнопку по клику на которую выполнялся бы тот же самый ajax запрос. Однако, администрация сайта не глупа, и сделала проверку "А заходил ли юзер на эту страницу?". Не беда, кнопочки на главной сделал, да и прикрепил к ним функцию создания блока, в который грузится контент странички, а после загрузки удаляется и выполняется имитация клика по заветной кнопке на внутренней. Однако за каждый клик по кнопке, перед имитацией нужно выполнить загрузку контента, это меня не утраивает. А хочу я сделать так, чтобы при загрузке странички, сразу же выполнялась загрузка контента внутренних страниц, после загрузки каждой выполнялась имитация клика и в итоге, кроме клика на F5 юзеру ничего не надо было делать. И тут появляется проблема, т.к. я недоделанный профан, и ничего кроме each() не знаю, то выходит у меня ровным счётом нихрена. Когда через each() я пытаюсь собрать все ссылки на странице и прогрузить их контент, делается это всё в один момент, хоть там 3 ссылки, хоть 200, мне нужно создать, какую-то очередность или делать паузы в each цикле, пока не завершилась загрузка контента текущей ссылки и удаление элемента с этим контентом. Сейчас говнокод выглядит примерно так: .each(function( index ) { var ahref = $(this).attr("href"); var rid = ahref.split("com/k")[1].split(".html")[0]; $("#member").append("<div id='wID"+rid+"'>rid content number-"+rid+"</div>"); $("#wID"+rid).load("http://site.com/k"+rid+".html", function(responseText, statusText, xhr){ if(statusText == "success") $("#wID"+rid).remove(); $("#btn"+rid).attr("value", "Done!"); if(statusText == "error") $("#wID"+rid).remove(); $("#btn"+rid).attr("value", "FailLoad!"); }); Т.к. чутьё мне подсказывает, что никаких пауз в цикле each() нету, прошу подсказать, какая функция подойдёт под создание нужного мне цикла, где можно будет переходить к загрузке контента следующей ссылки, только если загружен контент предыдущей. |
Гуглил и в итоге нашел то, что мне надо.
Честно скажу, что после работы с чистым php я уж точно не ожидал подобной реализации на js. Код с чужого блога, ибо понятия не имею, как тут относятся к внешним ссылкам. $(document).ready(function(){ var seq = new Array(); for (i=1; i<101; i++) { seq.push(i); } finishCallback = function(){alert('усе')} function go(){ if(seq.length) { $.ajax({ url: 'ajax.php?n='+seq.shift(), complete: function(){ go(); } }); } else {finishCallback()} } go(); }); |
Часовой пояс GMT +3, время: 14:09. |