Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jQuery: много запросов — один прелоадер, как сделать, чтобы работал до конца? 
V
    Опции темы
shootnix
Дата 21.1.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



Привет всем.
Возникла интересная ситуация при обработке многих запросов одновременно: сообщение про то, что загрузка сейчас идет, пропадает после первого запроса. А впереди их еще много. 
Такой код (jQuery):

Код

    var Ary = new Array('Bill', 'Bob', 'Mike');
    for ( c = 0; c < ary.length; c++ ) {
                $.ajax({
                    data: "name="+ary[c],
                    success: function(html) {
                        var res = $("<div><p>" + html + "</p></div>");
                        res.appendTo("#table");
                    },
                    beforeSend: function() {
                        $("#loader").html('Loading...');
                    },
                    complete: function() {
                        $("#loader").html('Loading...');
                    }
                });  
            }


Подскажите, как сделать, чтобы сообщение о загрузке пропадало после всех запросов, а не после первого.
PM WWW ICQ   Вверх
IDVsbruck
Дата 22.1.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Код
var ary = ["Bill", "Bob", "Mike"], verify_index = 0;
$("#loader").html("Loading ...");
for (var c = 0; c < ary.length; c++) {
    verify_index ++;
    $.ajax({data:"name=" + ary[c], uri:"?????", type:"POST",
        success:function(res) {$("#table_id").append($("<div><p>" + res + "</p></div>"))},
        complete:function() {
            verify_index --;
            if (verify_index == 0) $("#loader").html("");
        }
    });  
}

Как бы взглядом прямолинейного программирования конструкция может выглядеть нелогичной, так как проверочная переменная verify_index вроде как в теории обнуляется раньше, чем инкрементируется.
Однако не забываем, что запрос асинхронный, и время для прохода по циклу несоизмеримо меньше, чем запрос/ответ сервера.
Однако при желании можно и перестраховаться (лично я смысла не вижу): ввести вторую переменную, которая следит, все ли запросы отправлены.

Или типа так:
Код
var ary = ["Bill", "Bob", "Mike"], verify_index = ary.length;
$("#loader").html("Loading ...");
for (var c = 0; c < ary.length; c++) {
    $.ajax({data:"name=" + ary[c], uri:"?????", type:"POST",
        complete:function(res) {
            $("#table_id").append($("<div><p>" + res + "</p></div>"));
            if (--verify_index == 0) $("#loader").html("");
        }
    });  
}

PM MAIL   Вверх
shootnix
Дата 22.1.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



Да, работает, как надо =) Спасибо большое! 
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.