Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Пауза в each или управление шагами цикла? (https://javascript.ru/forum/events/47773-pauza-v-each-ili-upravlenie-shagami-cikla.html)

Molen 06.06.2014 19:10

Пауза в 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() нету, прошу подсказать, какая функция подойдёт под создание нужного мне цикла, где можно будет переходить к загрузке контента следующей ссылки, только если загружен контент предыдущей.

Molen 06.06.2014 23:23

Гуглил и в итоге нашел то, что мне надо.
Честно скажу, что после работы с чистым 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, время: 22:43.