Пауза в 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, время: 10:39. |