У меня вопрос достаточно не простой, поэтому выделю под него отдельную тему... Объявляю глобальную переменную, получаю запрос 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, то он всеравно выполнится раньше чем первый (( Я уже обгуглился весь, ничего по теме не могу найти
так и должно быть alert(2) начнет выполняться сразу после того как будет отправлен запрос на сервер не дожидаясь возвращения результата .... скажи что в итоге ты хочешь получить?
Мне как раз нужно как-то дождаться ответа от сервера. getJSON у меня в функции, эта функция вызывается по событию и должна заменять глобальную переменную полученным значением
Я так понял что после вызова getJSON выполнение скрипта продолжается дальше, данные еще не обновлены, потому-что ответ от сервера приходит не сразу. Так вот мне как раз и нужно ждать пока сервер ответит, т. к. дальнейшее выполнение скрипта без полученных данных бессмысленно. А вот как выставить задержку пока не придут данные я не знаю. Но быдлорешения с выставлением задержки не катят, потому-что неизвестно за какое время ответит сервер... и ответит ли он вообще
можно так: Code: <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> или же делать синхронный запрос
Эта функция вызывается из разных частей скрипта по нескольку раз. А можно про синхронный запрос подробнее?
Code: jQuery.ajax({ async: false, url: './index.php?cmd=json', dataType: 'json', success: function() { alert(1); } }); alert(2); Хотя многие рекомендуют не использовать синхронные запросы, если в этом нет необходимости. Лучше логику пересмотреть.
Спасибо, astrologer! То что надо! Я понимаю что с точки зрения идеологии Ajax этот код нехороший, но для отладки он мне очень сильно поможет. Пока-что требовалось чтобы скрипт выполнялся как можно более линейно. Потом я постараюсь сделать свой скрипт на асинхронных запросах.