2012-07-24 35 views
1

我提交表单,但需要我的表单,先运行一些检查,所以我打电话在一些JavaScript需要运行一个XMLHttpRequest,看看是否设置了一些东西在另一个PHP脚本。我能得到的值返回,但只有输出,其中我得到的响应区域内的消息,把这个变成一个变量,并使用其他地方不工作的任何企图,这是我的脚本:Javascript的XMLHttpRequest结果将不会存储在一个变量供其他用途

function validateform() { 

var complete = "Please fill in the following fields:"; 
var temp; 

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 

    temp=xmlhttp.responseText; 
    alert(temp); 
    } 
    } 


xmlhttp.open("GET","hrp/recaptcha/verify.php",true); 
xmlhttp.send(); 

alert(temp); 

第一“alert(temp)”被输出,但是在代码结束后的那个总是说undefined,所以我不能在外面使用它。

任何想法? 感谢:d

+2

AJAX异步运行,您需要等待该值返回。第二个警报立即运行并且没有任何值,第一个警报与数据实际收到时运行的回调一起运行。 – TheZ 2012-07-24 16:24:20

+0

啊,是的,这是有道理的,我将如何让它等待响应而不先运行其他代码? – user1482082 2012-07-24 16:30:57

+0

您可以使用承诺 - 我发现了很多StackOverflow有关使用XMLhttpRequest承诺的答案 – 2017-03-02 14:10:34

回答

1

看来,你不想要一个异步调用,在这种情况下,你会想做的事:

xmlhttp.open("GET","hrp/recaptcha/verify.php",false); 

您还可以删除块:

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
+1

注意:同步运行请求会使页面冻结,直到返回结果。 – TheZ 2012-07-24 16:34:25

+0

@TheZ是的。在做任何代码编辑之前,确保这是你想要的。 Ajax的异步方面是允许应用程序以部分方式加载页面而不是整个页面加载......但是也会阻止您正常使用返回值。 – Stegrex 2012-07-24 16:37:00

+0

让浏览器锁定有点麻烦,只要遵守它的逻辑,就有办法让AJAX工作。 – TheZ 2012-07-24 16:38:48

相关问题