Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.03.2014, 14:36
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Ожидание асинхронного ajax
Собственно вот:
/*
* подписываемся на onsubmit от некой формы
* пусть это будет форма добавления комментария
*/
EventHandler.add(document.forms.formName, 'submit', check);

function check(){
/*
* делаем какие-то вещи...
* проверяем поля формы на заполнение...
*/

/*
* а теперь хотим проверить, не потерял ли пользователь авторизацию
* для этого мы вызовем функцию, которая сделает запрос на сервер
* и проверит авторизацию
*
* функция сделает как минимум один запрос.
* допустим авторизация не потеряна
* и нужен реально только один запрос на сервер.
* 
* Вопрос! Каким образом можно подождать ответ сервера?
*/

/*
* а здесь нужно вернуть true или false
* точнее ничего не вернуть - разрешить отправку формы
* вернуть false - остановить отправку
*
* вся проблема в ajax запросе выше.
* Ну и конечно же запрос асинхронный.
*/
}


Если товаришь nerv_ это читает, то вот это не решение. Обещания позволяют избавиться от пирамид колбэков, но не ждать ajax ответ.
Ответить с цитированием
  #2 (permalink)  
Старый 28.03.2014, 15:04
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

на примере jquery

var promise = $.get("url");
promise.success(function() { //обработка ответа })
Ответить с цитированием
  #3 (permalink)  
Старый 28.03.2014, 15:09
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Hapson
Если товаришь nerv_ это читает, то вот это не решение. Обещания позволяют избавиться от пирамид колбэков, но не ждать ajax ответ.
ты так ничего и не понял В большинстве популярных библиотек и фреймворков(анугяр, жуквери, ...), конструктор аякс запросов возвращает обещание. Если опять не понятно, ответ на твой вопрос - обещание)

Сообщение от Hapson
вся проблема в ajax запросе выше
проблема в том, что ты не умеешь писать асинхронные приложения и, видимо, не желаешь учиться)

Возьми уже жуквери и будь счастлив) Или можешь zepto взять (жуквери совместимая либа).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 28.03.2014, 15:55
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

nerv_,
Я не выполняю какой-то заказ. Я учусь.
Покажи пример кода для решения вышеобозначенной проблемы.

Да, не умею писать асинхронные приложения. Пока не умею...
Ответить с цитированием
  #5 (permalink)  
Старый 28.03.2014, 16:50
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

nerv_,
Вот расскажи, как реализовать такой алгоритм:

1. перехватить отправку формы
2. сделать асинхронный запрос. Ответом будет 0 или 1
3. если ответ 1 - отправить форму, если 0 - запрет отправки и дальше какие-то действия.

Только без жуквери. Чистый яваскрипт, аякс и promise
Ответить с цитированием
  #6 (permalink)  
Старый 28.03.2014, 18:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Hapson
Вот расскажи, как реализовать такой алгоритм:
Никак. С асинхронным запросом так никак не сделать. Потому что по твоему алгоритму поток должен быть заблокирован до ответа на запрос. А суть асинхронного запроса именно в том, чтобы не блокировать поток. Врубаешься? Хочешь блокировать - юзай синхронные запросы (удел неудачников, хе хе).
Хочешь как нормальный поцык делать асинхронные запросы - научись жить без блокирования потока исполнения.

Конкретно твой случай:
1. перехватить отправку формы
2. отменить ее отправку. без всяких условий.
3. сделать асинхронный запрос. Ответом будет 0 или 1
4. если ответ 1 - отправить форму, если 0 - ниче не делаем.

nerv_, извини )
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 28.03.2014, 18:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А вобще, какого лешего? Шли аяксом всю форму. А там либо фигу юзеру показывай либо результат отправки.

А то получается, идешь в магазин сначала без денег, чтобы проверить открыт он или нет, а потом возвращаешься за деньгами и идешь в магазин снова )) Хуле деньги сразу то не взять, а?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 28.03.2014, 22:15
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 28.03.2014, 22:19
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

nerv_,
Ну покажи, как при помощи Promise сделать все ajax дела без отмены отправки формы. То есть в период между submit и фактом отправки пульнуть пару запросов, получить ответы и на основе ответов решить, разрешить форме уехать или нет. Не, я не прикалываюсь, может люди не знают, то что знаешь ты.
Ответить с цитированием
  #10 (permalink)  
Старый 28.03.2014, 22:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Hapson, у тя в постановке задачи противоречие: запрос асинхронный, но при этом хочешь блокирование потока.
Тебе промисы предложили не для реализации твоего противоречивого алгоритма, а для решения проблемы, так как это надо делать.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с AJAX Dim@ AJAX и COMET 4 16.09.2012 22:52
Передать значение в коллбэк Success для асинхронного Ajax denyweb AJAX и COMET 3 29.08.2012 23:20
ожидание завершения ajax в событии GrigTheFirst AJAX и COMET 2 09.12.2011 04:01
Ajax таблица gofkane Работа 0 25.09.2011 11:53
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57