2012-10-29 69 views
0

验证发送传真表单时,我正在检查传真是否已通过我们的软件传真包发送。这是对由脚本执行的表的简单查询,如果以前的传真存在,则返回一些文本,否则返回空白。为什么在xmlhttp.responseText之后没有设置变量?

我发现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

AJAX是'Asynchronous'。您提醒您注意在回调代码之前运行。 – TheZ

+1

首先回答这个问题 - Ajax中的A代表什么? – asawyer

回答

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变量。

+0

那么如果检查返回true(即,响应不是空白),那么是否没有办法停止表单提交? –

+0

有一种方法。你必须停止表单提交。等待回应。如果回复为真,请提交表单。无论您想要做什么,都必须在回调中完成,因为您无法知道您的请求何时完成。 – kapa

+0

我可以用sleep()来做到吗? –

相关问题