Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Как вернуть переменные из callback функции в jQuery? |

27.05.2009, 10:28
|
|
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме: 388345
Репутация:
58
|
|
Как вернуть переменные из callback функции в jQuery?
У меня вопрос достаточно не простой, поэтому выделю под него отдельную тему...
Объявляю глобальную переменную, получаю запрос getJSON и присваиваю ей в callback функции полученное значение.
PHP код:
<SCRIPT type='text/javascript'>
$(document).ready(function() {
var x = 0;
$.getJSON('./index.php?cmd=json', function(data) {
x = data.a;
alert(1)
alert(x)
});
alert(2)
alert(x)
});
</SCRIPT>
Трабла в том, что сначала выполняется alert(2) и значение переменной x = 0, а потом уже alert(1) и x принимает новое значение.
Каким образом можно задержать выполнение скрипта пока не будет присвоено значение в callback функции?
PS
Более того, если это все поместить в функцию, а после нее поставить алерт 2, то он всеравно выполнится раньше чем первый ((
Я уже обгуглился весь, ничего по теме не могу найти
Последний раз редактировалось ZagZag; 27.05.2009 в 11:03..
|
|
|

27.05.2009, 11:10
|
|
Познающий
Регистрация: 20.11.2008
Сообщений: 68
Провел на форуме: 108674
Репутация:
32
|
|
так и должно быть alert(2) начнет выполняться сразу после того как будет отправлен запрос на сервер не дожидаясь возвращения результата ....
скажи что в итоге ты хочешь получить?
|
|
|

27.05.2009, 11:34
|
|
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме: 388345
Репутация:
58
|
|
Мне как раз нужно как-то дождаться ответа от сервера.
getJSON у меня в функции, эта функция вызывается по событию и должна заменять глобальную переменную полученным значением
|
|
|

27.05.2009, 11:57
|
|
Познающий
Регистрация: 20.11.2008
Сообщений: 68
Провел на форуме: 108674
Репутация:
32
|
|
ну так операция внутри функции x = data.a; тебя чем то не устраивает?
|
|
|

27.05.2009, 12:10
|
|
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме: 388345
Репутация:
58
|
|
Я так понял что после вызова getJSON выполнение скрипта продолжается дальше, данные еще не обновлены, потому-что ответ от сервера приходит не сразу.
Так вот мне как раз и нужно ждать пока сервер ответит, т. к. дальнейшее выполнение скрипта без полученных данных бессмысленно. А вот как выставить задержку пока не придут данные я не знаю.
Но быдлорешения с выставлением задержки не катят, потому-что неизвестно за какое время ответит сервер... и ответит ли он вообще
Последний раз редактировалось ZagZag; 27.05.2009 в 12:12..
|
|
|

27.05.2009, 12:19
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
можно так:
Код:
<script type="text/javascript">
$(function()
{
var x = 0;
function next()
{
alert(2);
alert(x);
}
$.getJSON('./index.php?cmd=json', function(data)
{
x = data.a;
alert(1);
alert(x);
next();
});
});
</script>
или же делать синхронный запрос 
|
|
|

27.05.2009, 12:38
|
|
Познающий
Регистрация: 20.11.2008
Сообщений: 68
Провел на форуме: 108674
Репутация:
32
|
|
опередил 
|
|
|

27.05.2009, 13:48
|
|
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме: 388345
Репутация:
58
|
|
Эта функция вызывается из разных частей скрипта по нескольку раз.
А можно про синхронный запрос подробнее?
|
|
|

27.05.2009, 14:04
|
|
Познающий
Регистрация: 20.11.2008
Сообщений: 68
Провел на форуме: 108674
Репутация:
32
|
|
а какая разница сколько раз и откуда ее вызывают если это функция
|
|
|

27.05.2009, 14:14
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Сообщение от ZagZag
Эта функция вызывается из разных частей скрипта по нескольку раз.
А можно про синхронный запрос подробнее?
Код:
jQuery.ajax({
async: false,
url: './index.php?cmd=json',
dataType: 'json',
success: function()
{
alert(1);
}
});
alert(2);
Хотя многие рекомендуют не использовать синхронные запросы, если в этом нет необходимости. Лучше логику пересмотреть.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|