Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.07.2013, 18:33
Интересующийся
Отправить личное сообщение для egreek Посмотреть профиль Найти все сообщения от egreek
 
Регистрация: 22.08.2011
Сообщений: 18

Фоновая проверка данных формы перед отправкой
Здравствуйте, столкнулся со следующей проблемой:
Есть форма регистрации, необходимо провести ряд проверок
на правильность ввода, которые производятся ДжаваСкриптом,
а так же проверку емейла, на предмет уже зарегистрированного в БД.
Использую следующий код:
$(document).ready(function(){
		$("#reg-form").submit(function() { 
			var fields = new Array("reg-mail", "reg-pass", "reg-conf");
			var error_code = 0;      
			var email = $("#reg-mail").val();
			if(validEmail(email)){
					$.ajax({
						url:	 'core/mail-check.php',
						type:	 'POST',
						data:  'mail='+email ,
						success: function(response){
								alert(response);
						      if (response!='yes') error_code=5;
						},
						error:  function(xhr){
						    alert('Возникла ошибка:');
							
						}
					});
			}
/* прочие проверки ввода данных */

            if (error_code == 0){
                return true;
            }
            else {
	             ...
                     return false;
            }
            
            
                
        })
    });


Скрипт mail-check.php проверяет наличие в базе электронного адреса,
и если находит, возвращает yes.
Если ошибка возникает в какой-то другой проверке, то все работает
нормально: форма не отправляется, выводятся сообщения об ошибке.
Но если остается только проверка $.ajax, то кидает на error:...
Понятно, что проблема в конфликте с отправкой формы, но до конца ее понять и решить не получается пока. В чем вся соль? Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2013, 18:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну опять двадцать пять.. Сколько же вас таких.. Ключевое слово - асинхронность... Твой код if (error_code == 0) выполнится еще до того как xhr-запрос завершится, он не будет ждать его завершения.
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2013, 18:58
Интересующийся
Отправить личное сообщение для egreek Посмотреть профиль Найти все сообщения от egreek
 
Регистрация: 22.08.2011
Сообщений: 18

Сообщение от danik.js Посмотреть сообщение
Ну опять двадцать пять.. Сколько же вас таких.. Ключевое слово - асинхронность... Твой код if (error_code == 0) выполнится еще до того как xhr-запрос завершится, он не будет ждать его завершения.
Да, это в целом понятно. Но факт неработоспособности остается, по идее отправку формы надо засунуть в success:, а остальные проверки где выполнить? Или, может, есть какое-то более правильное и лаконичное решение?
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2013, 19:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Отправку формы сразу отменяем через event.preventDefault().
Далее делаем синхронные проверки. Если все ок, делаем проверку email, а в success делаем отправку формы.
В идеале конечно лучше слать сразу все поля, не только email, и если все ок, то тут же произвести предварительную регистрацию и выдать сообщение об успехе. Но это если используется подтверждение по email. Если не используется, то все сложнее и лучше не усложнять.
Ответить с цитированием
  #5 (permalink)  
Старый 19.07.2013, 19:16
Интересующийся
Отправить личное сообщение для egreek Посмотреть профиль Найти все сообщения от egreek
 
Регистрация: 22.08.2011
Сообщений: 18

Сообщение от danik.js Посмотреть сообщение
Отправку формы сразу отменяем через event.preventDefault().
Далее делаем синхронные проверки. Если все ок, делаем проверку email, а в success делаем отправку формы.
В идеале конечно лучше слать сразу все поля, не только email, и если все ок, то тут же произвести предварительную регистрацию и выдать сообщение об успехе. Но это если используется подтверждение по email. Если не используется, то все сложнее и лучше не усложнять.
Спасибо большое, буду пробовать.
Также есть рабочий вариант с "async: false", но наверное решение не очень элегантное?
Ответить с цитированием
  #6 (permalink)  
Старый 19.07.2013, 19:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от egreek
Также есть рабочий вариант с "async: false", но наверное решение не очень элегантное?
async:false блокирует поток, при этом UI тоже зависает. Поэтому его и не используют.
Ответить с цитированием
  #7 (permalink)  
Старый 20.07.2013, 11:17
Интересующийся
Отправить личное сообщение для egreek Посмотреть профиль Найти все сообщения от egreek
 
Регистрация: 22.08.2011
Сообщений: 18

danik.js, такое решение верно? или есть потенциальные недостатки?
$(document).ready(function(){
		$("#reg-form").submit(function(e, data) { 
			if (data == 'cansubmit') return true;
			e.preventDefault();
			var fields = $("#reg-form").serialize();
			$.ajax({
								url:	 'core/reg-check.php',
								type:	 'GET',
								data:  fields,
								success: function(response){
                                                //проверка всех полей в reg-check.php и регистрация там же
                                                //если все хорошо, сабмит сразу в cabinet.php
										if (response == 'ok') {
											$('#reg-form').trigger('submit', 'cansubmit');
										}
								},
								error:  function(){
								    alert('Возникла ошибка.');
									return false;
								}
							});
        })
    });

Последний раз редактировалось egreek, 20.07.2013 в 12:05.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дождаться отклика события, или проверка формы перед отправкой vid Общие вопросы Javascript 3 09.07.2013 21:36
AJAX проверка перед отправкой формы Tmin10 jQuery 4 16.11.2012 21:40
Вызов урла перед отправкой данных формы на сервер brazerok Events/DOM/Window 3 31.05.2011 12:49
Проверка данных формы составным условием? myafa Элементы интерфейса 8 01.04.2011 08:30
Верификация формы перед отправкой Катерина Общие вопросы Javascript 4 12.03.2010 15:03