2012-07-24 1 views
1

양식을 제출하고 있지만 일부 양식을 제출하기 위해 먼저 양식을 제출해야하므로 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

+0

아, 그렇습니다. 다른 코드를 먼저 실행하지 않고 응답을 기다리게하려면 어떻게해야합니까? – user1482082

+0

당신은 약속을 사용할 수 있습니다 - XMLhttpRequest와 함께 약속을 사용하는 것에 대한 많은 StackOverflow 응답을 발견했습니다. –

답변

1

:

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

또한 블록을 제거 할 수 있습니다

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

참고 : 동 기적으로 요청을 실행하면 결과가 반환 될 때까지 페이지가 고정됩니다. – TheZ

+0

@ TheZeep. 코드를 편집하기 전에 원하는 코드인지 확인하십시오. Ajax의 비동기적인 측면은 응용 프로그램이 전체 페이지로드가 아닌 페이지 단위로 페이지를로드 할 수 있도록 허용하지만 리턴 값을 정상적으로 사용하지 못하게합니다. – Stegrex

+0

브라우저를 잠그는 데 약간의 불편을 겪습니다. AJAX의 논리를 준수하는 한 AJAX를 작동시키는 방법이 있습니다. – TheZ

관련 문제