Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.10.2010, 13:05
Интересующийся
Отправить личное сообщение для astral_sight Посмотреть профиль Найти все сообщения от astral_sight
 
Регистрация: 16.07.2010
Сообщений: 17

проблема с рекурсией
Доброе время суток, дамы и господа)

Столкнулся с очередной проблемой. Есть задача: создать функцию, возвращающую результат аяксового запроса к БД. Код примерно следующий:

function getUserInfo(id,func){

$.ajax({type: 'POST', url: "ajax.php", dataType: 'json', data: 'id='+id+'&task=getUserInfo',success: function(res)
	{
		func.result=res;
		func();
		}
	});
};

function testFunc(id){

if(typeof(testFunc.result)=='undefined') {getUserInfo(id,arguments.callee);}
else return testFunc.result;
}
testFunc(1);


Проблема в том, что рекурсия на func запускается раньше, чем ей присваивается аргумент result. Т.е. testFunc() выведет result только при вторичном вызове.
Ответить с цитированием
  #2 (permalink)  
Старый 22.10.2010, 13:14
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

я не вижу объявления ф-ции func()
по-смыслу похоже, что вы testFunc и есть она
Ответить с цитированием
  #3 (permalink)  
Старый 22.10.2010, 13:16
Интересующийся
Отправить личное сообщение для astral_sight Посмотреть профиль Найти все сообщения от astral_sight
 
Регистрация: 16.07.2010
Сообщений: 17

да, testFunc и есть она. А объявил я её тут:


if(typeof(testFunc.result)=='undefined') {getUserInfo(id,arguments.callee);
Ответить с цитированием
  #4 (permalink)  
Старый 22.10.2010, 13:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А вы сейчас что рекурсией называете?

Запрос асинхронный, код не ждёт, когда запрос закончится.
Ответить с цитированием
  #5 (permalink)  
Старый 22.10.2010, 13:22
Интересующийся
Отправить личное сообщение для astral_sight Посмотреть профиль Найти все сообщения от astral_sight
 
Регистрация: 16.07.2010
Сообщений: 17

Запрос-то асинхронный, но если Вы заметили код

func.result=res; 
func();


начинает работать уже после окончания запроса в виде callback-функции. Т.ч. тут с этим все в порядке.

Т.е. проблема не в том, что функция не дожидается ответа от сервера, а в том, что дождавшись она обозначает новый аргумент исходной функции "testFunc" и вызывает её уже с новом аргументом. Но вызывает он ее раньше, чем этот аргумент успел присвоиться.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
проблема с рекурсией, не могу понять почему скрипт не выходит из неё. Flirer Общие вопросы Javascript 5 24.12.2009 01:01
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47