Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Ajax в JQuery, как дождаться ответа


Автор: prodex 12.10.2009, 21:48
Проблема в следующем: идет проверка валидности полей формы. Проверка идет через Ajax от Jquery

var result = null;
function valide($action)
  $.ajax({
      url: '/admin/ajax/content/ajaxAction',
      type: 'POST',
      data:{action: action},
      success: function(data){
         result = data;
      },
      error: function(data){
         /* действие */
      }
   });

  /* Тут как то нужно ожидать пока result изменит свое значение (уйдет с null).*/

  return result;
}

Вопрос, собсвено, а как сделать реализацию ожидания?

Автор: Itsys 12.10.2009, 22:47
никак ajax - это "асинхронная" обработка. Вопрос, что ты потом хочешь делать. Поэтому здесь
Код

      success: function(data){
         result = data;
      },

вместо "result = data", надо подставить вызов функции, которая и продолжит обработку после валидации.

Автор: prodex 13.10.2009, 12:49
Цитата(Itsys @ 12.10.2009,  22:47)
никак ajax - это "асинхронная" обработка. Вопрос, что ты потом хочешь делать. Поэтому здесь
Код

      success: function(data){
         result = data;
      },

вместо "result = data", надо подставить вызов функции, которая и продолжит обработку после валидации.

про success то я знаю, у меня задача маленько другая.
У меня идет валидация полей формы. Какое то поле нужно проверить на Ajax, но при этом нужно дождаться ответа (по Ajax), а уже потом переходит к следующему полю.

Автор: IDVsbruck 13.10.2009, 15:36
Это не меняет принципа вызова следующей функции. Itsys уже сказал. Просто пересмотри структуру очереди валидации. К примеру, глобальная переменная - массив проверямых полей и рекурсивная функция-валидатор с асинхронным запросом-проверкой.
А правильнее отдавать серверу все поля в одном запросе и получать ответ по всем полям (или по первому ошибочному): можно создавать на сервере json-строку со статусами проверки всех полей.
Одним словом - вариантов много, но делать независимую задержку - это не только неправильно, но еще и глупо и бессмысленно.

Автор: brother79 29.10.2009, 12:57
Я обычно делал на нажатие - return false, а после аякса - уже если успешно, то form.submit() из ф-ии ответа после аякса

Автор: Любитель 3.11.2009, 23:45
Во-первых, редко нужна серверная проверка (понятно, что наличие пользователя в базе на клиенте не проверишь, но.. если говорить в целом). Во-вторых, в любом случае количество реквестов надо минимизировать. Если форма большая, то всю валидацию, требующую участия сервера, конечно, лучше сделать не на потере фокуса, а перед сабмитом формы, одним реквестом.

Автор: IDVsbruck 4.11.2009, 14:18
Цитата(Любитель @  3.11.2009,  23:45 Найти цитируемый пост)
Во-первых, редко нужна серверная проверка

Интересно, на чем основано такое безапеляционное утверждение? - Для серьезного проекта обязательно нужна. По своему опыту скажу, что в 99% использую, так как кроме введенной формы еще гипотетически можно предположить чужой запрос с данными, а также отправка через отлов и изменение веб-потока (забыл как называется этот ...нг), да и серьезный анализ данных получается только серверным языком. Понятно, предпроверка форм нужна - так сказать, "по-быстрому" проверить валидность и заполненность полей.

Автор: Любитель 4.11.2009, 18:34
Ээ.. Вы невнимательно прочитали мой пост или просто не так его поняли. Речь идёт про аяксовую серверную проверку. Валидация имеет две цели: удобство и секьюрность. Второе - само собой делается только на сервере, но уже при сабмите, а не при заполнении формы. Первое - по возможности на клиенте (если сайт должен уметь работать и без JS, то первое также должно делать и на сервере - с выдачей красивых сообщений сервером).

Автор: nikolay9999 7.12.2011, 21:39
Можно использовать async: false, для .ajax - это позволит сделать ассинхронный запрос - синхронным , тоесть сделать возможным выполнять действия после получения ответа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)