С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/54: Рейтинг темы: голосов - 54, средняя оценка - 4.94
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82

Ajax ожидание ответа от асинхронного запроса

22.01.2015, 14:40. Показов 11456. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Возник вопрос. А знаний и гугла не хватает.
Суть задачи:
JavaScript
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
39
$.each($('***'), function( ) {
                    if ( $(this).val().length === 0 ) {
                        return;
                    }
                    $.ajax({
                        type: 'POST',
                        url: '***',
                        async: true,
                        data: {
                            email: $(this).val()
                        },
                        cache: false,
                        success: function(data) {
                            if ( data.success == 1 ) {
                                count_observer++;
                            }
                        }
                    });
                });
$.each($('.****'), function( ) {
                    if ( $(this).val().length === 0 ) {
                        return;
                    }
                    $.ajax({
                        type: 'POST',
                        url: '****',
                        async: true,
                        data: {
                            email: $(this).val()
                        },
                        cache: false,
                        success: function(data) {
                            if ( data.success == 1 ) {
                                console.log(count_speaker);
                                count_speaker++;
                            }
                        }
                    });
                });
На страничке присутствует расширяемая форма. По нажатию кнопки пошла обработка. Я отправляю целый список данных асинхронно. Когда произойдёт добавление этих данных, мне необходимо от другого модуля получить ответ, этот модуль производит расчёт.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$.ajax({
                    type: 'POST',
                    url: '***',
                    data: {
                      ****
                    },
                    async:false,
                    cache: false,
                    success: function(data) {
                        if(data.success != 1){
                            //alertify.alert(error_message);
                            return false;
                        }
                        current_order_cost = data.estimation.amount;
                    }
Я по малоопытности попробовал через таймер проверять или while циклом считать количество ответов. Но таймер пропускает скрипт дальше, а while модуль не получает данные от счётчика внутри success.

Можете подсказать в какую сторону думать, либо читать. Ну а за готовое решение вообще большое спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2015, 14:40
Ответы с готовыми решениями:

Вывод ответа php из ajax запроса
Всем доброго вечера. Я программист С++ и к яве и php имею не много отношения (хотя с php и html я вроде немного знаком)... ...

Обработка ответа после пост-запроса (Ajax)
Разбираюсь с ajax-функциями jQuery и возник вот такой вопрос, ответ на который никак найти не могу: Например, когда мы используем...

После вставки ответа ajax в input запроса, ответ ajax не изменяется
Здравствуйте! В общем так, есть поле input, есть таблица с полем count. Задача: изменить содержимое поле count по средством ajax, но при...

9
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.01.2015, 14:58
Цитата Сообщение от muskos Посмотреть сообщение
А знаний и гугла не хватает
А может гугл тут ни при чем?
Может причина в том, что у меня температура, но я в упор не понимаю схему происходящего. Наблюдаю три метода $.ajax, два из которых, страшно говорить, но вызываются в цикле. Вы уверены, что это всё нужно и нельзя обойтись всего одним запросом к серверу? Если нет, то хоть "на пальцах" объясните, что и как у вас работает.
0
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
22.01.2015, 15:15  [ТС]
Дело в том, что бекенд мне не доступен и из функционала есть только ддобавление данных таким способом, который описан в двух циклах.
Мне необходимо вначале отправить данные в базу. Потом, когда данные добавятся, мне нужно получить данные которые считает бекенд.
Т.е. В двух первых циклах я отправляю данные. Последним расчет. В целом сейчас это работает синхронно. Понятно, что браузер умирает в ожидании цикла.... Возникла идея сделать добавление данных асинхронно. Но последний запрос на расчет я могу выполнить только когда все добавится.
Как-то вот так.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.01.2015, 16:10
Цитата Сообщение от muskos Посмотреть сообщение
бекенд мне не доступен
Сочувствую... Но было бы не плохо хотя бы понять, почему два отдельных цикла. Там разные обработчики? Пока могу предложить вариант с "обещаниями", но ощущение, что всё можно сделать более рационально - не покидает.
Открываем пример и наблюдаем в консоли за ходом выполнения. Для наглядности, специально имитировал разную задержку в получении ответа.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function firstRequest() {
    var promises = [];
    $.each($(':text'), function (i, el) {
        var dl = Math.floor(Math.random() * 3) + 1;
        promises.push($.ajax({
            url: '/echo/html/',
            type: 'POST',
            data: {
                html: $(el).val(),
                delay: dl
            }
        }));
    });
    $.when.apply($, promises).then(lastRequest);
}
 
firstRequest();
 
function lastRequest() {
    console.log('Теперь выполняем финальный запрос')
}
0
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
22.01.2015, 16:52  [ТС]
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Там разные обработчики?
Там разные данные. В разные обработчики. От обоих нужно асинхронно получить данные.
Попробую сегодня ваш метод через обещания. Я читал, что нежелательно их применение. Но опять же не знаю других вариантов.

Добавлено через 7 минут
A success выполняется с задержкой? Мне же необходимо получить количество добавленных данных. Конечно, я могу пойти на поводу у обещания и посчитать сколько элементов было на странице. Но ведь это не совсем правильно.

Добавлено через 50 секунд
Я скорее всего не прав в своём коде, но
http://jsfiddle.net/4rey5yhu/1/
получается количество ответов я получаю после выполнения финальной функции...
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.01.2015, 17:00
Цитата Сообщение от muskos Посмотреть сообщение
Я скорее всего не прав в своём коде, но
Как я могу знать: правы вы или нет, если я даже не могу врубиться, что вы хотите делать на каждом этапе. Объяснить вы не хотите или не можете, поэтому я просто пытаюсь угадывать.
0
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
22.01.2015, 17:23  [ТС]
Извини, пожалуйста. Конечно не хочется обсуждать проект, ну что я могу поделать. Давай попробую ещё раз.
На ресурсе есть две группы инпутов. Обе эти группы принимают одни и те же данные. Назовём их покупатели и продавцы.
Первый цикл добавляет все почтовые адреса покупателей.
Второй цикл добавляет все почтовые адреса продавцов.
Как и писал выше, личного доступа к бекенду нету, но есть возможность попросить подпилить.
Так вот мы добавили две эти группы адресов и теперь необходимо посчитать, к примеру сколько кому товара отдать. Это делает бекенд и последним запросом я получаю назад данные этого расчёт.
Как там это реализовано - я не знаю. Может эти данные из базы дёргаются или каждый раз по запросу заново рассчитываются, я не знаю.

Добавлено через 3 минуты
Как и писалось, сейчас идёт синхронный запрос. У него в success считается количество добавлений, обычным счётчиком. count++. Потом я даже не проверяя этот count, отдаю его в другой запрос, который возвращает мне количество товара для тех и других
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.01.2015, 17:41
Лучший ответ Сообщение было отмечено muskos как решение

Решение

Цитата Сообщение от muskos Посмотреть сообщение
и последним запросом я получаю назад данные этого расчёт.
То есть, из цикла вам нужно получить значение в success, которое приходит последним ответом с сервера и это же значение передать финальным запросом. Я всё правильно понял?

Добавлено через 10 минут
В общем, смотрите два варианта: раз и два. Буду надеяться, что хоть в одном угадал.
1
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
22.01.2015, 17:54  [ТС]
Цитата Сообщение от Lazy_Den Посмотреть сообщение
В общем, смотрите два варианта: раз и два. Буду надеяться, что хоть в одном угадал.
Супер! Второй то что надо. Сейчас установлю, потестирую.
Вот эти обещания мне и не понятны были. Т.е. если я функцию определю в then, то она дождётся счётчика?
И если можно что-то глобальное посоветуйте почитать по этим моментам. Интересно будет всё по асинхронному js, ajax.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.01.2015, 18:17
muskos, Promise не относится к ajax напрямую, а используется для отложенных и асинхронных вычислений. В jQuery - это объект Deferred
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2015, 18:17
Помогаю со студенческими работами здесь

Анимация ожидания ответа ajax запроса
Можно ли сделать анимацию загрузки такую как на этом видео: тыЦ это анимация из samsung touchwiz android 5.0 Как сделать такую на...

Ожидание ответа от запроса к серверу по сети
Всего доброго! Использую Volley для получения ответа от сервера, мне нужно чтобы при нажатии на кнопку выполнялся запрос и ответ на...

Ожидание выполнение асинхронного метода
Всем привет. Помогите разобраться с асинхронным программированием. Пишу приложение для windows store Есть класс. В нем два асинхронных...

Вызов ajax запроса после обработки другого ajax запроса
Добрый день. По нажатию на кнопку происходит ajax запрос. Сервер возвращает true или false. Если результат true, то должен выполняться еще...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru