2012-07-24 76 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

相關問題