Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: асинхронный ajax запрос с остановкой кода

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Pavelbeginner
Отправлено: 08 Августа, 2013 - 11:53:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




В моей коде идет отправка ajax запроса. Эта отправка запроса находится внутри ф-ции,

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. freeEmail : function(input)
  3. {
  4.   if (input.is(".parcel--email"))
  5.   {
  6.         var statusCode;
  7.        
  8.         $.ajax ({
  9.                 type: "GET",
  10.                 url: apiRoute + "registration/checkemail?email=" + input.val(),
  11.                 headers: {
  12.                      'RequestVerificationToken': token
  13.                 },          
  14.                 complete: function (data) {
  15.                      statusCode = data.status;
  16.                 },
  17.                 async : false
  18.         });
  19.        
  20.         if(statusCode === 200)
  21.           return true;
  22.         else
  23.           return false;
  24.   }
  25.   else
  26.    return true;
  27. },
  28.  

Поскольку запрос асинхронный, то код после отправки запроса продолжает свою работу и ф-ция freeEmail : function(input) завершает свою работу. Мне же надо, чтобы во время отправки ajax запроса код дождался, когда аякс запрос закончится и выполнится ф-ция complete: function (data) и код продолжит выполняться. Для этого есть параметр async : false, но он вешает браузер, точнее страница не реагирует на действия пользователя пока ajax не выполнится и создается впечатление, что браузер повис. Если бы запрос выполнялся быстро, то черт с ним, но запрос длится секунды 2/3 и все виснет на это время. Как быть?


Отредактировано модератором: armancho7777777, 08 Августа, 2013 - 12:39:57
Уважайте участников конференции, форматируйте код должным образом.
 
 Top
DelphinPRO
Отправлено: 08 Августа, 2013 - 11:57:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




могу ошибаться, но по-моему никак. либо "подвисание", либо переписать код, чтобы он работал по событиям


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
esterio
Отправлено: 08 Августа, 2013 - 12:15:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




никак. на то он и асинхронный. он продолжает испольнятся. сделайте его не ассихронним. тогда JS будет дожидатся окончания запрося
 
 Top
IllusionMH
Отправлено: 08 Августа, 2013 - 12:34:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Pavelbeginner, перенести оставшийся код функции в обработчик ответа.
 
 Top
tuareg
Отправлено: 08 Августа, 2013 - 14:40:08
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




IllusionMH пишет:
перенести оставшийся код функции в обработчик ответа.
Не прокатит.
По теме, см $.Deferred();
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Августа, 2013 - 15:00:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tuareg пишет:
Не прокатит.

Почему ?
 
 Top
tuareg
Отправлено: 08 Августа, 2013 - 15:26:48
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




armancho7777777 пишет:
Почему ?

Хотя может я и ошибся. Надо попробовать. Но все равно лучше, чтобы возвращался $.Deferred();
Что то типа
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. freeEmail : function(input){
  3.     var def = $.Deffered();
  4.     return (if (input.hasClass(".parcel--email")))?def.resolve():$ajax(...тут код..);
  5. }
  6. ///И где надо следить.
  7. freeEmail(myInput).done(function(){
  8.   // успешный ответ
  9. }).fail(function(){
  10.   // все плохо
  11. });
  12.  
 
 Top
SAD
Отправлено: 08 Августа, 2013 - 15:27:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Не парьте человеку мозг. На случай ajax запросов сделайте какую нибудь "крутилку" и затемнение окна, чтобы было понятно, что идет обработка запроса.

Можно заюзать jquery.blockUI

(Отредактировано автором: 08 Августа, 2013 - 15:29:55)

 
 Top
nerv
Отправлено: 08 Августа, 2013 - 19:01:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. $.get("example.php").success(function() {
  2.     alert("Успешное выполнение");
  3. });


tuareg пишет:
Но все равно лучше, чтобы возвращался $.Deferred();

уже http://api[dot]jquery[dot]com/jQuery[dot]get/

tuareg пишет:
прокатит.

прокатит ) Но проще и читабельней см. выше


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB