
28.03.2014, 14:36
|
 |
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Ожидание асинхронного ajax
Собственно вот:
/*
* подписываемся на onsubmit от некой формы
* пусть это будет форма добавления комментария
*/
EventHandler.add(document.forms.formName, 'submit', check);
function check(){
/*
* делаем какие-то вещи...
* проверяем поля формы на заполнение...
*/
/*
* а теперь хотим проверить, не потерял ли пользователь авторизацию
* для этого мы вызовем функцию, которая сделает запрос на сервер
* и проверит авторизацию
*
* функция сделает как минимум один запрос.
* допустим авторизация не потеряна
* и нужен реально только один запрос на сервер.
*
* Вопрос! Каким образом можно подождать ответ сервера?
*/
/*
* а здесь нужно вернуть true или false
* точнее ничего не вернуть - разрешить отправку формы
* вернуть false - остановить отправку
*
* вся проблема в ajax запросе выше.
* Ну и конечно же запрос асинхронный.
*/
}
Если товаришь nerv_ это читает, то вот это не решение. Обещания позволяют избавиться от пирамид колбэков, но не ждать ajax ответ.
|
|

28.03.2014, 15:04
|
 |
Профессор
|
|
Регистрация: 11.12.2013
Сообщений: 313
|
|
на примере jquery
var promise = $.get("url");
promise.success(function() { //обработка ответа })
|
|

28.03.2014, 15:09
|
 |
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Hapson
|
Если товаришь nerv_ это читает, то вот это не решение. Обещания позволяют избавиться от пирамид колбэков, но не ждать ajax ответ.
|
ты так ничего и не понял  В большинстве популярных библиотек и фреймворков(анугяр, жуквери, ...), конструктор аякс запросов возвращает обещание. Если опять не понятно, ответ на твой вопрос - обещание)
Сообщение от Hapson
|
вся проблема в ajax запросе выше
|
проблема в том, что ты не умеешь писать асинхронные приложения и, видимо, не желаешь учиться)
Возьми уже жуквери и будь счастлив) Или можешь zepto взять (жуквери совместимая либа).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|

28.03.2014, 15:55
|
 |
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
nerv_,
Я не выполняю какой-то заказ. Я учусь.
Покажи пример кода для решения вышеобозначенной проблемы.
Да, не умею писать асинхронные приложения. Пока не умею...
|
|

28.03.2014, 16:50
|
 |
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
nerv_,
Вот расскажи, как реализовать такой алгоритм:
1. перехватить отправку формы
2. сделать асинхронный запрос. Ответом будет 0 или 1
3. если ответ 1 - отправить форму, если 0 - запрет отправки и дальше какие-то действия.
Только без жуквери. Чистый яваскрипт, аякс и promise
|
|

28.03.2014, 18:17
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Hapson
|
Вот расскажи, как реализовать такой алгоритм:
|
Никак. С асинхронным запросом так никак не сделать. Потому что по твоему алгоритму поток должен быть заблокирован до ответа на запрос. А суть асинхронного запроса именно в том, чтобы не блокировать поток. Врубаешься? Хочешь блокировать - юзай синхронные запросы (удел неудачников, хе хе).
Хочешь как нормальный поцык делать асинхронные запросы - научись жить без блокирования потока исполнения.
Конкретно твой случай:
1. перехватить отправку формы
2. отменить ее отправку. без всяких условий.
3. сделать асинхронный запрос. Ответом будет 0 или 1
4. если ответ 1 - отправить форму, если 0 - ниче не делаем.
nerv_, извини )
__________________
В личку только с интересными предложениями
|
|

28.03.2014, 18:21
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
А вобще, какого лешего? Шли аяксом всю форму. А там либо фигу юзеру показывай либо результат отправки.
А то получается, идешь в магазин сначала без денег, чтобы проверить открыт он или нет, а потом возвращаешься за деньгами и идешь в магазин снова )) Хуле деньги сразу то не взять, а?
__________________
В личку только с интересными предложениями
|
|

28.03.2014, 22:15
|
 |
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
danik.js,
Сообщение от danik.js
|
Никак
|
Вот и я такого мнения
Сообщение от danik.js
|
Конкретно твой случай:
1. перехватить отправку формы
2. отменить ее отправку. без всяких условий.
3. сделать асинхронный запрос. Ответом будет 0 или 1
4. если ответ 1 - отправить форму, если 0 - ниче не делаем.
|
И именно так я реализовал. Сразу отмена отправки, потом аяксовые дела, возможно вывод формы авторизации, если кука юзера протухла, а потом уже form.submit()
Сообщение от danik.js
|
А вобще, какого лешего? Шли аяксом всю форму. А там либо фигу юзеру показывай либо результат отправки.
|
Это можно и без ajax. Я на php уже все написал. Даже если кука юзера протухнет, пока он в форме поэму строчит, то весь его труд будет сохранен и потом восстановлен, если он удачно подтвердит свои данные.
А на js я написал практически тоже самое, но чтоб юзера не кидало по страницам, а просто выплыла форма, он введет логин/пароль и все,форма уедет, будто кука у него и не протухала. Ну или не уедет, если он 3 раза неверно укажет данные в аяксовой форме, тогда js проверка отключится и пойдет он на стандартную страницу авторизации. А там еще несколько попыток и блокировка на N-ное время
Сообщение от danik.js
|
А то получается, идешь в магазин сначала без денег, чтобы проверить открыт он или нет, а потом возвращаешься за деньгами и идешь в магазин снова )) Хуле деньги сразу то не взять, а?
|
 а вот потерял... пока шел
Последний раз редактировалось Hapson, 28.03.2014 в 22:24.
|
|

28.03.2014, 22:19
|
 |
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
nerv_,
Ну покажи, как при помощи Promise сделать все ajax дела без отмены отправки формы. То есть в период между submit и фактом отправки пульнуть пару запросов, получить ответы и на основе ответов решить, разрешить форме уехать или нет. Не, я не прикалываюсь, может люди не знают, то что знаешь ты.
|
|

28.03.2014, 22:33
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Hapson, у тя в постановке задачи противоречие: запрос асинхронный, но при этом хочешь блокирование потока.
Тебе промисы предложили не для реализации твоего противоречивого алгоритма, а для решения проблемы, так как это надо делать.
__________________
В личку только с интересными предложениями
|
|
|
|