使用ajax回调函数的奇怪行为

时间:2010-12-29 08:03:27

标签: javascript ajax xmlhttprequest global-variables scope

当尝试从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来检查我的用户是否是login_in。
  2. POSTRequest回调函数check_response()来解析响应并将变量logged_in设置为TRUE。
  3. 接下来当我尝试使用变量 logged_in 时,它是:第一次FALSE; TRUE ......
  4. 你知道为什么会发生这种奇怪的行为吗?

2 个答案:

答案 0 :(得分:1)

因为“makePOSTRequest”是异步的,所以该方法之后的第一个“alert”显示“false”,因为这是先前设置的变量的默认值,并且当你调用alert时,你实际上是“阻止”执行第二个警报,到那时请求结束,“logged_in”设置为true。

答案 1 :(得分:0)

当传递0或1代替真或假时,问题是否相同?