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 :: return из замыкания

 PHP.SU

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


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

> Описание: как правильно нужно делать
Panoptik
Отправлено: 24 Мая, 2012 - 15:37:33
Post Id



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


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


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




есть обыкновенная форма
CODE (html):
скопировать код в буфер обмена
  1. <form onsubmit='return myfunc();'></form>

и собственно функция
CODE (javascript):
скопировать код в буфер обмена
  1. function myfunc() {
  2.   var  result = false;
  3.   //ajax request
  4.   $.getJSON('my.site.ru',{},function(data) {
  5.     //тут обработка результатов
  6.     if(data.error == 'ok') {
  7.       //мои действия и выход из всей большой функции позволяя форме просабмититься
  8.       return true;
  9.     }
  10.   });
  11.   return result;
  12. }

получается ретурн делается внутри замыкания и форма не хочет сабмититься.
вопрос: как правильно вернуть true в данной ситуации?

(Отредактировано автором: 24 Мая, 2012 - 15:38:15)



-----
Just do it
 
 Top
caballero
Отправлено: 24 Мая, 2012 - 15:56:34
Post Id


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


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


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




здесь асинхронный вызов
return result; у тебя сработает раньше чем отработает ajax и независимо от того как он сработает
return true; просто не имеет смысла


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Panoptik
Отправлено: 24 Мая, 2012 - 15:59:29
Post Id



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


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


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




как же выйти из положения?


-----
Just do it
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Мая, 2012 - 16:00:44
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




CODE (javascript):
скопировать код в буфер обмена
  1. function myfunc() {
  2.   var  result = false;
  3.   //ajax request
  4.   $.getJSON('my.site.ru',{},function(data) {
  5.     //тут обработка результатов
  6.     if(data.error == 'ok') {
  7.       //мои действия и выход из всей большой функции позволяя форме просабмититься
  8.       result = true;
  9.     }
  10.   });
  11.   return result;
  12. }

(Добавление)
А не, не прав...
 
 Top
Panoptik
Отправлено: 24 Мая, 2012 - 16:04:32
Post Id



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


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


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




DeepVarvar пишет:
А не, не прав...
это прискорбно

жуткая неделя. голова не варит вообще(


-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 24 Мая, 2012 - 16:16:47
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar пишет:
А не, не прав...

Да нет, только 1 строка пропущена.
После result = true; надо инициировать отсылку формы повторно. $(/*подходящий идентификатор*/).submit();

+, возможно, убрать слово var, т.е. сделать глобальной. В каллбеках регулярно путаю области видимости.


-----
PostgreSQL DBA
 
 Top
Panoptik
Отправлено: 24 Мая, 2012 - 16:21:12
Post Id



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


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


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




решил практически так же как посоветовал Мелкий
с одним лишь условием что убрал из формы событие onsubmit ибо происходило зацикливание (рекурсивный вызов)
CODE (html):
скопировать код в буфер обмена
  1. <form id='myform'>
  2.  <input type='submit'  onclick='return myfunc();' />
  3. </form>

CODE (javascript):
скопировать код в буфер обмена
  1.     function myfunc() {
  2.       //ajax request
  3.       $.getJSON('my.site.ru',{},function(data) {
  4.         //тут обработка результатов
  5.         if(data.error == 'ok') {
  6.           //мои действия и выход из всей большой функции позволяя форме просабмититься
  7.           $('#myform').submit();
  8.         }
  9.       });
  10.       return false;
  11.     }

(Отредактировано автором: 24 Мая, 2012 - 16:21:42)



-----
Just do it
 
 Top
Viper
Отправлено: 24 Мая, 2012 - 16:25:16
Post Id



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


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


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




Panoptik если отсылаете данные на другой домен


CODE (javascript):
скопировать код в буфер обмена
  1. $('#myform').submit(function(e){
  2.         e.preventDefault();
  3.         $.ajax({
  4.                 url: 'my.site.ru',
  5.                 data: $(this).serialize()+'callback=?',
  6.                 dataType: 'json',
  7.                 async: false,
  8.                 crossDomain: true
  9.         }).done(function(data){
  10.                 if(data.error == 'ok') {
  11.                         return true;
  12.                 }
  13.         });
  14. });


На стороне сервера ответ должен быть таким
PHP:
скопировать код в буфер обмена
  1. echo $_GET['callback'].'('.json_encode($response).')';


Но помните что данные от сервера js ждать не будет, а продолжит выполнять код дальше.

Все же уточните что вы хотите конкретно - проверить введенные данные и отправить, либо просто отправить? И куда? Если кросдомен, то одно, если на тот же самый, то другое.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Panoptik
Отправлено: 24 Мая, 2012 - 16:30:00
Post Id



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


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


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




ну задача следующая:
интернет-магазин. пользователь делает заказ, оставляет свои данные в форме и сабмитит ее. данные о заказе записываются в мою базу данных, и я возвращаю ответ, где указывается номер заказа и сумма, для отправки на сторонний сервер оплаты. эти данные я подставляю в хидден поля этой же формы перед отправкой
вот тут то мне и нужно сделать сабмит и отправить укомплектованную форму для завершения оплаты


-----
Just do it
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Мая, 2012 - 16:32:23
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Viper пишет:
если отсылаете данные на другой домен <form id="myform"> ...

С классом тоже все ровно проходит, да и не важно по какой метке искать элемент, его всеравно можно обработать.
 
 Top
tuareg
Отправлено: 24 Мая, 2012 - 18:19:21
Post Id


Участник


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


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




Тут скорее всего надо смотреть в сторону $.Deferred.pipe()
 
 Top
Viper
Отправлено: 25 Мая, 2012 - 08:42:09
Post Id



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


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


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




DeepVarvar пишет:
С классом тоже все ровно проходит, да и не важно по какой метке искать элемент, его всеравно можно обработать.
не в том дело. я привел пример. запрос-то походу кросдоменный.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 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