![]() |
0 Всего найдено: 11
devilmaycry
Сообщение
22/02/2011 20:32
Копия темы
jquery Помогите разобраться $( document ).ready( function() { createHints( 'img', /\d+$/, function( id ) { var htmlx = ''; $.ajax({ type: "POST", url: "engine/ajax/tooltips/skill.php?wqid=" + id +"&key=" + Math.random(), data: "name=John&location=Boston", success: function(msg){ htmlx += '#' + msg + ''; } }); return htmlx; } ); } ); Почему return htmlx; выводит пустоту? Например если заменить htmlx += '#' + msg + ''; на alert(msg), то в алерте выводится содержимое переменной msg. Я НЕ знаю JS, по этому помогите дельным советом, а не ссылкой в мануал.
Free-man
Сообщение
22/02/2011 20:49
Копия темы
запрос асинхронный, return htmlx возвращается раньше, чем выполнится запрос
devilmaycry
Сообщение
22/02/2011 20:52
Копия темы
Может подскажете, как сделать так, чтобы работало. Я уже 5 часов к ряду проклинаю JS))
unart
Сообщение
22/02/2011 20:55
Копия темы
я подобное решал путем проверки переменной в php, т.е на success: навешивалась проверка возврата из php определенного условия
RiDDi
Сообщение
22/02/2011 21:02
Копия темы
функции с асинхронными запросами надо вызывать с калбеками вместо return аля функция(калбек) { $.ajax({success:function(){ if(калбек && $.isFunction(калбек)) калбек(); }); }
devilmaycry
Сообщение
22/02/2011 21:06
Копия темы
Вот просто ради любопытства, с какой целью вы это написали?))
RiDDi
Сообщение
22/02/2011 21:10
Копия темы
что бы Вы поняли как работают асинхронные функции )) так же как обработчики событий в принципе асинхронные запросы это и есть своего рода обработчики событий для браузера )
devilmaycry
Сообщение
22/02/2011 21:11
Копия темы
И вы серьезно думаете, что я, НЕ знающий JS, пойму то, что вы написали?
tu512
Сообщение
22/02/2011 23:35
Копия темы
0
не зная контекста применения этой функции сложно что-то советовать. А почему не работает? потому что при вызове функции createHints сначала выполняется var htmlx=''; потом делается запрос через ajax строка $.ajax и дальше... после этого делается return htmlx (там естественно ничего нет) а после того как выполнится асинхронный запрос выполняется код из строки htmlx += '#' + msg + ''; такая вот последовательность выполнения. в этом собственно и ошибка (это если еще не заморачиваться по поводу видимости переменных. поэтому если надо что-то менять, то менять прямо в функции вызываемой по success например заменить htmlx += '#' + msg + ''; на $('#' + msg + '').html('done'); |
Выразить восторг, поругаться или предложить что-нибудь можно на форуме |
Для обсуждения этого сервиса так же есть темы на фрилансе по поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал" |