Javascript.RU

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

Как приостановить выполнение скрипта до получения результата AJAX запроса?
В скрипте пытаюсь получить переменную из сессии, пробую сделать это с помощью аякс запроса, но не могу понять как мне приостановить выполнение скрипта до момента получения результата запроса.
За основу взял этот код.
Пока получилось нечто вот такое:
function MailSubmit()
	  {
		  var message = document.getElementById('message');
		  var capcha = document.getElementById('capcha');
		  if (message.value == '')
		  {alert ('oops1'); message.focus(); return false;}

		  var sessionKey = '';
		  var req = getXmlHttp() 
		  req.onreadystatechange = function() 
		  {  
			  if (req.readyState == 4) 
			  {
				  sessionKey = req.statusTexts;
				  if(req.status == 200) 
				  { 
					  sessionKey = req.responseText;
					  
				  }
			  }
		  }
		  req.open('GET', 'moduls/reg/ajax.php?sessionKey=1', true);  
		  req.send(null);
		  
		  // Последующий код должен дождаться завершения аякс запроса
		  
		  if (capcha.value != sessionKey)
		  {alert ('oops2'); capcha.focus(); return false;}
	  }

НАУЧИТЕ как правильно!!! или скажите где почитать...
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2011, 18:51
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Делим весь код на две части: код до и код после. А потом делаем как-то так:

function codeAfterAJAX(data) {
 /* здесь пишите всё, что вам нужно */
};

req.onreadystatechange= function(){
 if (this.readyState === 4 && this.status ==200) // вообще, нам подойдёт любое значение status от 200 до 299.
  codeAfterAJAX(this.responseText);
}


P. S. Найдите и почитайте "Профессиональные приёмы программирования" Джона Резига.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 30.10.2011, 20:15
Аспирант
Отправить личное сообщение для Хиросим Посмотреть профиль Найти все сообщения от Хиросим
 
Регистрация: 29.04.2010
Сообщений: 28

Блин... просто то как...
trikadin, нижайший поклон...
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2011, 20:20
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

выполнять синхронный запрос
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2011, 21:08
Аспирант
Отправить личное сообщение для Хиросим Посмотреть профиль Найти все сообщения от Хиросим
 
Регистрация: 29.04.2010
Сообщений: 28

Возникла другая трудность.
Если вешаю функцию на любое событие любого элемента DOM, все работает... но если цепляю ее к кнопке (input type="submit"), туда где она и должна быть, то форма тупо отправляется и функция сработать не успевает...
Код теперь выглядит так
function verifMailForm(sessionKey)
{
	var message = document.getElementById('message');
	var capcha = document.getElementById('capcha');
	if (message.value == '')
	{alert ('oops1'); message.focus(); return false;}
	if (capcha.value != sessionKey)
	{alert ('oops2'); capcha.focus(); return false;}
}

function ajaxMailSubmit()
{
	var req = getXmlHttp() 
	req.onreadystatechange = function() 
	{  
		if (req.readyState == 4 && req.status == 200) 
		{
			verifMailForm(req.responseText);
		}
	}
	req.open('GET', 'moduls/ajax/ajax.php?sessionKey=1', true);  
	req.send(null);
}

вызов так
<input name="mail_submit" type="submit" value="Отправить" onclick="return ajaxMailSubmit()" />
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2011, 21:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,252

Сообщение от Хиросим
onclick="return ajaxMailSubmit()"
Интересно... Кто это учит так писать?
Уже не один человек такое пишет...
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2011, 21:36
Аспирант
Отправить личное сообщение для Хиросим Посмотреть профиль Найти все сообщения от Хиросим
 
Регистрация: 29.04.2010
Сообщений: 28

return перед вызовом функции способствует остановке отправки формы на сервер если какоето из условий не выполнено (отобразился alert). Иначе сообщение об ошибке (alert) отображается, но форма всеравно улетает на сервер....
Кто научил не помню, если есть более корректный метод остановить отправку формы, дайте ссыл...
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2011, 21:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,252

Сообщение от Хиросим
Кто научил не помню
Т.е. ранее ты такое применял успешно?

Сообщение от Хиросим
если есть более корректный метод остановить отправку формы
Да он единственный. Это onsubmit у form. Вот один из примеров реализации
http://htmlbook.ru/html/attr/onsubmit

И оставьте кнопку
<input type="submit" value="Отправить" />

в покое...
Ответить с цитированием
  #9 (permalink)  
Старый 30.10.2011, 23:09
Аспирант
Отправить личное сообщение для Хиросим Посмотреть профиль Найти все сообщения от Хиросим
 
Регистрация: 29.04.2010
Сообщений: 28

нуда применял, досих пор работает))...
спасибо, наставлениям внял... все работает...
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2011, 10:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Хиросим
нуда применял, досих пор работает))...
У вас работает, а у первого же пользователя, который не тянется к мышке, чтобы отправить форму, а отправляет форму энтером, не работает.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12
Как "подождать" выполнение асинхронного запроса? WalterScott AJAX и COMET 25 05.06.2009 12:18
как прекратить выполнение скрипта ? kefi Общие вопросы Javascript 3 31.03.2009 19:05
Как приостановить выполнение цикла? SashaBorandi jQuery 3 13.02.2009 08:57