Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Как вернуть переменные из callback функции в jQuery? (https://forum.antichat.xyz/showthread.php?t=122507)

ZagZag 27.05.2009 10:28

Как вернуть переменные из callback функции в jQuery?
 
У меня вопрос достаточно не простой, поэтому выделю под него отдельную тему...

Объявляю глобальную переменную, получаю запрос getJSON и присваиваю ей в callback функции полученное значение.
PHP код:

<SCRIPT type='text/javascript'>
$(
document).ready(function() {
    var 
0;
    $.
getJSON('./index.php?cmd=json', function(data) {
        
data.a;
        
alert(1)
        
alert(x)
    });
    
alert(2)
    
alert(x)
});
</
SCRIPT

Трабла в том, что сначала выполняется alert(2) и значение переменной x = 0, а потом уже alert(1) и x принимает новое значение.
Каким образом можно задержать выполнение скрипта пока не будет присвоено значение в callback функции?

PS
Более того, если это все поместить в функцию, а после нее поставить алерт 2, то он всеравно выполнится раньше чем первый ((
Я уже обгуглился весь, ничего по теме не могу найти

MuXaJIbI4 27.05.2009 11:10

так и должно быть alert(2) начнет выполняться сразу после того как будет отправлен запрос на сервер не дожидаясь возвращения результата ....

скажи что в итоге ты хочешь получить?

ZagZag 27.05.2009 11:34

Мне как раз нужно как-то дождаться ответа от сервера.

getJSON у меня в функции, эта функция вызывается по событию и должна заменять глобальную переменную полученным значением

MuXaJIbI4 27.05.2009 11:57

ну так операция внутри функции x = data.a; тебя чем то не устраивает?

ZagZag 27.05.2009 12:10

Я так понял что после вызова getJSON выполнение скрипта продолжается дальше, данные еще не обновлены, потому-что ответ от сервера приходит не сразу.
Так вот мне как раз и нужно ждать пока сервер ответит, т. к. дальнейшее выполнение скрипта без полученных данных бессмысленно. А вот как выставить задержку пока не придут данные я не знаю.

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

astrologer 27.05.2009 12:19

можно так:
Код:

<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>

или же делать синхронный запрос :)

MuXaJIbI4 27.05.2009 12:38

опередил :)

ZagZag 27.05.2009 13:48

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

MuXaJIbI4 27.05.2009 14:04

а какая разница сколько раз и откуда ее вызывают если это функция

astrologer 27.05.2009 14:14

Цитата:

Сообщение от ZagZag
Эта функция вызывается из разных частей скрипта по нескольку раз.
А можно про синхронный запрос подробнее?

Код:

jQuery.ajax({
  async: false,
  url: './index.php?cmd=json',
  dataType: 'json',
  success: function()
  {
    alert(1);
  }
});

alert(2);

Хотя многие рекомендуют не использовать синхронные запросы, если в этом нет необходимости. Лучше логику пересмотреть.


Время: 12:58