Странное поведение с функцией обратного вызова ajax

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

var logged_in=false;

function check_response(response,el) {
logged_in=true; 
alert(logged_in); //outputs TRUE
}

makePOSTRequest("/is_logged.php", check_response); //when ready call check_response() with the XML response
alert(logged_in); //first time outputs FALSE;
alert(logged_in); //second time outputs TRUE;
  1. Я запускаю POSTRequest, чтобы проверить, зарегистрирован ли мой пользователь.
  2. POSTRequest вызывает функцию check_response(), чтобы проанализировать ответ и установить для переменной logged_in значение TRUE.
  3. Затем, когда я пытаюсь использовать переменную logged_in, это: 1-й раз FALSE; тогда ПРАВДА...

Вы знаете, почему происходит такое странное поведение?


person Nevyan    schedule 29.12.2010    source источник


Ответы (2)


Поскольку «makePOSTRequest» является асинхронным, поэтому первое «оповещение» после этого метода показывает «ложь», потому что это значение по умолчанию для переменной, установленной ранее, и когда вы вызываете оповещение, вы фактически «блокируете» выполнение второго оповещения и к тому времени запрос завершается, и для «logged_in» устанавливается значение «истина».

person Arnab    schedule 29.12.2010
comment
Я пытался отложить выполнение первого предупреждения(), и результаты были такими же. - person Nevyan; 29.12.2010
comment
Не могли бы вы попробовать использовать console.log в Firebug и посмотреть последовательность выполнения, а также попробовать добавить оператор отладчика в свой код JS и отладить его в Firebug. - person Arnab; 29.12.2010

Проблема такая же при передаче 0 или 1 вместо true или false ?

person eka808    schedule 29.12.2010
comment
Да, он выдает тот же результат при использовании 0 или 1 - person Nevyan; 29.12.2010