【问题标题】:Strange behaviour with an ajax callback functionajax 回调函数的奇怪行为
【发布时间】:2010-12-29 08:03:27
【问题描述】:

当尝试从 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 时,它是:第一次 FALSE;然后是真的...

你知道为什么会发生这种奇怪的行为吗?

【问题讨论】:

    标签: javascript ajax xmlhttprequest global-variables scope


    【解决方案1】:

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

    【讨论】:

    • 我尝试延迟第一个alert()的执行,结果是一样的。
    • 您能否尝试在 Firebug 中使用“console.log”并查看执行顺序,还可以尝试在您的 JS 代码中添加“debugger”语句并在 Firebug 中进行调试。
    【解决方案2】:

    传递 0 或 1 代替 true 或 false 时问题是否相同?

    【讨论】:

    • 是的,使用 0 或 1 的结果相同
    猜你喜欢
    • 2021-12-06
    • 2015-01-27
    • 2023-03-09
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多