powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Синхронный AJAX в Crome
6 сообщений из 6, страница 1 из 1
Синхронный AJAX в Crome
    #39108137
stardg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые спецы по JS. Помогите решить проблему.

Делал кусок веб-приложения, сугубо бэкендного характера (импорт огромных XML-файлов, около 1Гб). Чтобы сервак не отправлялся в аут по максимальной времени работы скрипта и памяти, сам процесс разбил на куски и вызываю каждый кусок из браузера при помощи AJAX и в ответ отображаю процесс (прогрессбар) довольному пользователю.

Что сделал. перевел $.ajax в синхронный режим async=false и пожалуйста! Работает как часики. Все мои этапы работы аккуратно один за одним запускаются.

Всё настроил и отладил, работает как рояль в Большом театре, но начали тестить манагеры и тут выяснилось, что браузеру Google Crome (на котором сидит 90% манагеров) async=false до одного места. Он все равно выполняет все $.ajax, $.get, $.post АСИНХРОННО (выкинув в консоль сообщение про "ай-я-яй, так нельзя... depricated ... и т.д."). И в итоге все мои наработки летят тоже в одно место.

Причем я и раньше знал об этой особенности Хрома, но т.к. сам Лисовод ярый - что то спустил это на тормозах.

Так вот, когда просто идет серия AJAX запросов подряд, то проблем нет делаю примерно так

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$.ajax({ type: "GET",url:'/test/import', data: "cmd=categories_load" , dataType:'json'})
            .then( function(result) {
               
                //.. делаем чтото ...
                
                $.ajax({type: "GET", url: '/test/import', data: "cmd=categories_import", dataType:'json'})
                .then(function(result) {
                         //.. делаем чтото ...

ну и т.д.



Тут какбе всё просто (это я просто уже в процессе переписал на deffered objects, хотя конечно можно было и просто слушать события onSuccess и т.д. не суть...) тут всё нормально работает одно за другим - статика есть статика.

Но пара ajax-запросов у меня вызываются динамически в зависимости от условий (циклом или рекурсией) вот тут беда...

Вот рекурсивная функция:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 function SlicePacckets(ct,s,all_pack) {
            console.log('Нарезаем SQL-пакеты');
            $.ajax({ type: "GET", url:'/test/import/', data:'cmd=packets&start='+s+'&numpack='+all_pack, dataType:'json'}).then(
                 function(msg){
                 console.log(msg);
                  s+=1000;   
                  $('#progress').text(all_pack);
                  $('#progress_to').text(parseInt(ct/1000));
                  all_pack++;
                  if (s<=ct) {
                     SlicePacckets(ct,s,all_pack);
                  }
                }
            );
            console.log('Нарезано');
            
            return all_pack;
}



Вот с ней (и таких несколько) беда... в консоль попадает следующее
1. console.log('Нарезаем SQL-пакеты');
2. console.log('Нарезано');
3. и начинает результаты запроса выводить console.log(msg);

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

ЧТО БЛИН ТУТ МОЖНО СДЕЛАТЬ? Как заставить аджакс в хроме работать синхронно? Как без всяких дебильных конструкций (типа while с выходом по постусловию) запустить следующий этап работы, после гарантированного окончания текущего?

Помогите! Вопрос уже из области "как блин?", дело чести.

Убедительная просьба:
1) Если знаете какие нибудь плагины или расширения jquery которые умеют синхронные запросы в Crome - приму с дорогой душой, сам ничего не нашел.
2) Личный опыт и лайфхаки - интересны.
3) Если решается при помощи defered objects - напишите плиз примерчик, ибо уже 3-й день копаю в эту сторону.
4) Всякие недоучки, которым по теме сказать нечего кроме, того как объяснить мне что "так вообще нельзя" , "импортировать вообще ничего не надо", "делай через Кронт", "пусть маленькие файлы присылают", "это не твоя работа вообще" - идите ЛЕСОМ! И надеюсь на поддержку модераторов в этом. Вопрос задан конкретно специалистом по JS и людям которым интересна сама задача.
...
Рейтинг: 0 / 0
Синхронный AJAX в Crome
    #39108732
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stardgВсякие недоучки, которым по теме сказать
ты так всех распугал))).
stardgимпорт огромных XML-файлов, около 1Гб
выбирай средства под задачу. Зачем нагибать асинхронный веб?
Почему не взять веб-сокет с постоянным соединением?
...
Рейтинг: 0 / 0
Синхронный AJAX в Crome
    #39108769
stardg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123stardgВсякие недоучки, которым по теме сказать
ты так всех распугал))).

Видать не всех...

P.S. Стандартная форумная ситуация, спрашиваешь как колесо заменить, а в ответ "надо было Хонду брать".
...
Рейтинг: 0 / 0
Синхронный AJAX в Crome
    #39108772
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stardg,
форум есть форум.
Игнор страшнее чем флуд.
...
Рейтинг: 0 / 0
Синхронный AJAX в Crome
    #39108774
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stardg,
докачку\обрыв связи реализуешь?
...
Рейтинг: 0 / 0
Синхронный AJAX в Crome
    #39109305
stardg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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


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