2010-12-29 4 views
1

при попытке установить переменную из функции обратного вызова 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, чтобы проверить, если мой пользователь logged_in.
  2. POSTRequest вызывает функцию check_response() для анализа ответа и установки переменной logged_in в TRUE.
  3. Далее, когда я пытаюсь использовать переменную logged_in это: 1-й раз FALSE; затем TRUE ...

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

ответ

0

Является ли проблема одинаковой при передаче 0 или 1 вместо истинного или ложного?

+0

Да, он дает тот же результат при использовании 0 или 1 – Nevyan

1

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

+0

Я пытался отложить выполнение первого предупреждения(), и результаты были одинаковыми. – Nevyan

+0

Можете ли вы попробовать использовать «console.log» в Firebug и посмотреть последовательность выполнения, попробуйте поместить инструкцию «отладчик» в свой JS-код и отладить его в Firebug. – Arnab