验证发送传真表格时,我正在检查是否已使用我们的软件传真包发送传真。这是对脚本执行的表的简单查询,如果存在先前的传真则返回一些文本,否则返回空白。
我发现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?
答案 0 :(得分:0)
首先,您必须了解AJAX是异步的。当您执行xmlhttp.send();
时,您的请求将被发送并继续执行代码,因此下一步运行的是:
alert(flag_stop_fax);
目前,flag_stop_fax
仍为零,因为请求尚未完成。
您为xmlhttp.onreadystatechange
指定的回调功能只会在请求完成时运行。执行在这里不是连续的。它类似于:
xmlhttp.send();
- 请求已启动 alert(flag_stop_fax);
- 警告变量
...
...
(一段时间后,当服务器回答时)
xmlhttp.onreadystatechange
已执行,正在更改flag_stop_fax
变量。