2013-01-19 3 views
0

가능한 중복 :
How to return the response from an AJAX call from a function?아약스 응답 자바 스크립트 함수 반환 오류

가이 코드에 문제가 있어요.

이 함수가 FALSE를 반환하면 올바르게 작동합니다.

그러나 TRUE를 반환하면 그렇지 않습니다.

TRUE를 반환 할 때 양식을 제출하고 싶습니다.

<form action='register.php' method="post" onsubmit="return validate()" > ... </form> 

여기에 코멘트에서 언급 한 바와 같이, 당신은 비동기 코드에 문제가있는 스크립트를

<script language="JavaScript"> 
function validate() 
{ 
    var toreturn = false; 


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

     var e = document.getElementById('e').value; 
     var p = document.getElementById('p').value; 
     var r = document.getElementById('r').value; 


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



       if(xmlhttp.responseText != "ok") 
       { 
        document.getElementById("msg").innerHTML = xmlhttp.responseText; 

        $(function() { 
         $("#msg").hide().fadeIn("slow"); 
        }, 3000); 


       } 
       else toreturn = true;  

      } 
     } 

     xmlhttp.open("POST","register_validate.php"); 
     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     xmlhttp.send("e="+e+"&p="+p+"&r="+r); 



     return toreturn; 
} 
</script> 
+0

은 ... 당신의 최선의 선택은 당신이 얻을 때 다시 제출 이벤트를 트리거하는 것입니다 응답. –

답변

0

문제 : 당신이 성공적인 결과를 얻을 경우, 당신의 AJAX 콜백에서 양식을 제출 (이 양식에게 ID를 부여 필요) 동기식 기능을 FALSE 값을 추가 How do I return the response from an asynchronous call?

에서 @Felix 클링에 의한 대답은

당신은 할 수 없습니다
+0

예, 요청이 완료 될 때까지 브라우저가 응답하지 않게됩니다. 진지하게, 그렇게하지 말고, 비동기로 가서 콜백을 사용하십시오. – bfavaretto

+0

@bfavaretto 만약 내가 아직도 기다리고있는 반응이 짧은 시간 밖에 걸리지 않는다면 나는 아직도 그것을 사용하면 괜찮습니까? –

+0

문제는 모든 사용자에게 얼마나 오래 걸릴지 알 수 없다는 것입니다. – bfavaretto

1

을합니다. validate 함수에서 반환 할 때 toreturn 변수가 채워지지 않습니다. AJAX와 콜백에 대한

:

xmlhttp.onreadystatechange = function() { 
    // ... 
} 

당신은 당신의 현재 기능은 특히 (이미 완료를 한 후 그 함수 안에 넣어 코드가, 나중에 '옆에 넣어'와 호출되는 것을 상상할 수있는 때 AJAX 요청의 준비 상태가 변경됨).

버튼을 제출 버튼이 아닌 것으로 만들고 싶습니다. 대한

xmlhttp.open("POST","register_validate.php",false); 

덕분에 거짓 추가하여 해결

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     if (xmlhttp.responseText != "ok") { 
      document.getElementById("msg").innerHTML = xmlhttp.responseText; 

      $(function() { 
       $("#msg").hide().fadeIn("slow"); 
      }, 3000); 


     } else document.getElementById('your-form-id').submit(); 
    } 
}