为什么在xmlhttp.responseText之后没有设置变量?

时间:2012-10-29 18:38:20

标签: javascript ajax variables xmlhttprequest

验证发送传真表格时,我正在检查是否已使用我们的软件传真包发送传真。这是对脚本执行的表的简单查询,如果存在先前的传真则返回一些文本,否则返回空白。

我发现flag_stop_fax变量仍然设置为零,即使我有一些响应文本(例如:“传真已经发送。”)。

flag_stop_fax = 0;
xmlhttp.onreadystatechange=function() 
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    {
        var response = xmlhttp.responseText;
        if (response!='')
        {
            flag_stop_fax = 1;
            alert(response);
        }
    }
}

xmlhttp.open('GET','/check_for_active_fax.php?fax_number=' + fax_number + '&t='+Math.random(),true);
xmlhttp.send();

alert(flag_stop_fax); // shows "0" even when I have a non-blank response from xmlhttp.responseText

还有一些其他的验证位,但上面的脚本有望说明问题。我不会将't'变量用于任何事情 - 这只是防止浏览器缓存的保护措施。

那么为什么我的flag_stop_fax不能设置为0?

1 个答案:

答案 0 :(得分:0)

首先,您必须了解AJAX是异步的。当您执行xmlhttp.send();时,您的请求将被发送并继续执行代码,因此下一步运行的是:

alert(flag_stop_fax);

目前,flag_stop_fax仍为零,因为请求尚未完成。

您为xmlhttp.onreadystatechange指定的回调功能只会在请求完成时运行。执行在这里不是连续的。它类似于:

  1. xmlhttp.send(); - 请求已启动
  2. alert(flag_stop_fax); - 警告变量

    ...
    ...
    (一段时间后,当服务器回答时)

    xmlhttp.onreadystatechange已执行,正在更改flag_stop_fax变量。