Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Прелоадер с процентами во время выполнения ajax запроса / 20 сообщений из 20, страница 1 из 1
21.08.2014, 15:59
    #38725751
meg17m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
Как сделать прелоадер с бегущими процентами во время аякс запроса на выборку строк из базы. Типа выбрано K из N строк и выводит K/N*100 = P%.
Если у кого-то есть сниппет, поделитесь, плиз.
...
Рейтинг: 0 / 0
21.08.2014, 16:04
    #38725760
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLasta , процент можно показать только если читаешь данные кусками... Получаешь сразу все - фик тебе прогресса.
...
Рейтинг: 0 / 0
21.08.2014, 16:09
    #38725767
meg17m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
krvsa MegaLasta , процент можно показать только если читаешь данные кусками... Получаешь сразу все - фик тебе прогресса.
И что, совсем-совсем никак? Никаких хаков и фейков нельзя придумать? Босс то требует :(
...
Рейтинг: 0 / 0
21.08.2014, 16:37
    #38725813
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
фейк можно. зацикленный прогрессбар :)
...
Рейтинг: 0 / 0
21.08.2014, 16:40
    #38725818
meg17m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
Antonariyфейк можно. зацикленный прогрессбар :) но он же реальные проценты выдавать не будет, верно?
...
Рейтинг: 0 / 0
21.08.2014, 16:41
    #38725821
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLastaИ что, совсем-совсем никак? Никаких хаков и фейков нельзя придумать? Босс то требует :(
...
Рейтинг: 0 / 0
21.08.2014, 16:44
    #38725827
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLastaИ что, совсем-совсем никак?
Я же написал - грузи частями, предварительно узнав, сколько таких частей будет...
...
Рейтинг: 0 / 0
21.08.2014, 16:46
    #38725831
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLastaAntonariyфейк можно. зацикленный прогрессбар :) но он же реальные проценты выдавать не будет, верно?ну это же фейк, верно?
...
Рейтинг: 0 / 0
21.08.2014, 22:25
    #38726101
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
можно

не аякс, а в фрейме. получай лонгпул ответ, первым делом передать общее число записей, потом фронденд их частями получает, отмечает прогрес бар. но врядли оно будет того стоить.

сокрей всего оно будет очень быстро...
солько ты там данных будешь получать? 100, 200, 400?
...
Рейтинг: 0 / 0
21.08.2014, 22:27
    #38726102
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLastakrvsa MegaLasta , процент можно показать только если читаешь данные кусками... Получаешь сразу все - фик тебе прогресса.
И что, совсем-совсем никак? Никаких хаков и фейков нельзя придумать? Босс то требует :(

так скажи боссу за кружкой кофе.. прогрес бар самому хочеться.. но это знаете, как если бы я вам сказал, что хочу в нашей фирме получать зп как в лондоне. и сдесь дело не втом же что вам жалко чтоб я хорошо жил, вы не сможете просто продавать по нашим ценам, а покупать мою работу по лондонским или токийским.

я лично за циклический прогрес бар
...
Рейтинг: 0 / 0
22.08.2014, 07:31
    #38726205
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
торитически - можно, вопрос что за данные?
и как они отправляются.
если сервер формирует их в какомто цикле (к примеру for .... или while)
то используя технологию websockets можно отобразить без проблем.
...
Рейтинг: 0 / 0
22.08.2014, 07:35
    #38726207
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
я так сделал когда клиент отсылает кучу фоток сразу (хром, мозилла) сервер их пересчитывает для уменьшения объёма и полсле зваершения обработки очередной фотки -отправляет клиенту что обработал.
...
Рейтинг: 0 / 0
22.08.2014, 07:39
    #38726209
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
с ajax такое не прокатит, на каждый запрос он должен получить ответ...
запрос на данные - ответ на данные...
...
Рейтинг: 0 / 0
22.08.2014, 09:46
    #38726285
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
вадяс ajax такое не прокатит, на каждый запрос он должен получить ответ...
запрос на данные - ответ на данные...
А кто мешает запустить процесс и писать в файл (или куда-то ещё) процент выполнения, а параллельно кидать запросы к серверу с проверкой хода выполнения :)
...
Рейтинг: 0 / 0
22.08.2014, 10:42
    #38726351
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
Можно поставить прогрессбар на получаемые данные (xhr.onprogress - он и на аплоад и на даунлоад работает), которые в данный момент передаются от сервера клиенту в этом самом запросе. А если там что-то где-то отдельно на сервере крутится, то можно в кэш сервера записывать ход выполнения и другим параллельным запросом с websockets получать данные.
...
Рейтинг: 0 / 0
22.08.2014, 12:44
    #38726540
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
автор во время аякс запроса на выборку строк из базы.
ну если запрос к базе длительный, то получить прогресс бар даже на сервере не получится, т.к. база не выдает никаких данных пока работает запрос. только крутить гифку-индикатор...
...
Рейтинг: 0 / 0
22.08.2014, 13:36
    #38726645
meg17m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
вадяавтор во время аякс запроса на выборку строк из базы.
ну если запрос к базе длительный, то получить прогресс бар даже на сервере не получится, т.к. база не выдает никаких данных пока работает запрос. только крутить гифку-индикатор...

Нет, там как раз куча запросов в цикле. Количество итераций цикла наперед известно, так что тут все норм. Я сейчас делаю вот так:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function second_passed() {
        if (GL_PRELODER == true)
        {
            $.ajax({
                url: "/admin/main/getSessionPreloader",
                success: function(data){
                    $('#ajaxouter').html("<center><br/><br/><br/><img border=0 src='/media/newdis/images/ajax-loader.gif'><br>"+data+"%</center>");
                }
            });
        }
    }

    function percentPreloder()
    {
        window.setInterval(second_passed,100);
    }

    function ajaxtabsant(lid)
    {
        if(lid == 1)
        {
            $('#ajaxouter').html("<center><br/><br/><br/><img border=0 src='/media/newdis/images/ajax-loader.gif'></center>");
            GL_PRELODER = true;
            percentPreloder();
            $.ajax({
                 type: "POST",
                 url: "/admin/main/getPerDaysAjax",
                 success: function(data){

                     GL_PRELODER = false; 
                     $('#ajaxouter').html(data);
                     ajaxHideLast();
                     sortTable(document.getElementById("mainstattableid"), sortAsc, sortDesc );

                 }


а внутри пхпшной ф-ии в аяксе:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
$this->setSessionPreloader(0);
for ($i = 0; $i <= $num_days; $i++)
{
   ....
   $this->setSessionPreloader($kk_an);
}
$this->setSessionPreloader(0);


....


//возвращает сессию прелоадера
    public function getSessionPreloader()
    {
        //$res =  Session::instance(Session::$default)->get('Preloader');
        $uid = Auth::instance()->get_user()->id;
        $res = DB::query(Database::SELECT," SELECT preloader
                                            FROM users
                                            WHERE id = :id ")
            ->bind(':id',$uid)
            ->execute()
            ->get('preloader');
        if (!$res || $res == '') {$res = '0';}
        return $res;
    }

    //аписывает сессию прелоадера
    public function setSessionPreloader($val)
    {
        $uid = Auth::instance()->get_user()->id;
        DB::query(Database::UPDATE," UPDATE users
                                     SET preloader = :preloader
                                     WHERE id = :id ")
            ->bind(':preloader',$val)
            ->bind(':id', $uid)
            ->execute();
    }


В итоге получаю крутящийся кружок безо всякого текста, потом отображаются данные, потом они исчезают и выводится кружок со 100%. Отсюда я делаю вывод, что ф-ия:
Код: html
1.
2.
3.
4.
function second_passed() {
        if (GL_PRELODER == true)
        {
            $.ajax({


начинает работать только тогда, когда заканчивает работать основной аякс запрос. Т.е. запросы выполняются сугубо последовательно.

Также есть вариант с progress:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
$.ajax({
                 type: "POST",
                 url: "/admin/main/getPerDaysAjax",
                 success: function(data){


                     $('#ajaxouter').html(data);
                     ajaxHideLast();
                     sortTable(document.getElementById("mainstattableid"), sortAsc, sortDesc );

                 },
                 xhr: function()
                 {
                    var xhr = new window.XMLHttpRequest();
                    //Upload progress
                    xhr.upload.addEventListener("progress", function(evt){
                        if (evt.lengthComputable) {
                            var pct = Math.round((evt.loaded / evt.total) * 100);
                            $('#ajaxouter').html("<center><br/><br/><br/><img border=0 src='/media/newdis/images/ajax-loader.gif'><br>"+pct+"%</center>");
                        }
                    }, false);
                    //Download progress
                    xhr.addEventListener("progress", function(evt){
                        if (evt.lengthComputable) {
                            var pct = Math.round((evt.loaded / evt.total) * 100);
                            $('#ajaxouter').html("<center><br/><br/><br/><img border=0 src='/media/newdis/images/ajax-loader.gif'><br>"+pct+"%</center>");
                        }
                    }, false);
                    return xhr;
                 }
            });


Но он работает таким образом, что сначала выдает 100%, а потом только начинает выполняться аякс запрос. Т.е. он считает походу просто объем пхп файла в аяксе, а сколько будет выполняться сам скрипт, он не знает.

Записей может быть много, до несколько тыс.

... А с сокетами нужно подумать, конечно.
...
Рейтинг: 0 / 0
22.08.2014, 14:28
    #38726733
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLasta,

похоже на блокировку сессии :) Или ещё чего-то... 2 параллельных запроса с одного клиента точно можно сделать...
...
Рейтинг: 0 / 0
22.08.2014, 16:25
    #38726922
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
MegaLasta,
если ты поробуешь websocket - ты откажешья от ajax, и тебе захочется всё переделать на websocket .
хотя можно и обе технологии использовать параллельно. только надо решить вопрос с кросбраузерностью
...
Рейтинг: 0 / 0
22.08.2014, 20:03
    #38727101
meg17m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прелоадер с процентами во время выполнения ajax запроса
ПрограмёрMegaLasta,

похоже на блокировку сессии :) Или ещё чего-то... 2 параллельных запроса с одного клиента точно можно сделать...

да, но там сессий нету, вы же видите, что я через базу переписал
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Прелоадер с процентами во время выполнения ajax запроса / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]