2015-01-01 2 views
0

제출 단추 클릭 이벤트에서 ajax 호출을 작성하여 필드 유효성 검사 서버 측을 확인합니다. 유효성 검사에 실패하면 Ajax 응답에서 적절한 오류 메시지를 표시하고 false를 반환하며 양식을 중지하여 작업 URL에 제출합니다. 그러나 '성공'에 대한 응답을 받으면 양식은 여전히 ​​액션 URL 스크립트에 제출하지 않습니다.Ajax 응답 전에 return 문이 실행됩니다.

return 문이 ajax 응답 전에 실행되는 경우입니까?

또한 양식이 제출되지 않는 이유는 무엇입니까? 당신은 그냥 인수로 함수에 함수를 통과 한 후 아약스 호출의 성공을 실행해야하므로

<input type="submit" onclick="return validate();" name="submit" value="Proceed" /> 

<script type="text/javascript"> 
    var flag=false; 
    function validate(){ 

     $.ajax({ 
      type:"POST", 
      url:"../chk.php", 
      data:datastring, 
      cache: false, 
      success: function (result) { 


       if(result.toString() == "success"){ 

        flag=true; 

       } 

       else{ 
        $('#error').css('display', 'block'); 
        $('#error').css('color','red'); 
        $('#error').text(result.toString()); 
        flag=false; 
       } 
      } 

     }); 


     return flag; 
    } 
</script> 

답변

2

한 가지 방법은 호출하는 문은 함수에서 다음 문을 호출 할 수 있습니다 전에 완료하는 거짓 수단 비동기

사용을 async : false

설정입니다.

$.ajax({ 
      type:"POST", 
      url:"../chk.php", 
      data:datastring, 
      cache: false, 
      async : false, 
      success: function (result) { 

또한 왜 아약스 함수 외부 값을 반환하는 당신이 async : false

$.ajax({ 
      type:"POST", 
      url:"../chk.php", 
      data:datastring, 
      cache: false, 
      success: function (result) { 


       if(result.toString() == "success"){ 

        flag=true; 

       } 

       else{ 
        $('#error').css('display', 'block'); 
        $('#error').css('color','red'); 
        $('#error').text(result.toString()); 
        flag=false; 
       } 
      } 

      return flag; 

     }); 
을 사용하지 않는 경우, 아약스 성공 내부의 값을 반환
3

아약스는 비동기 : 여기

는 코드입니다.

function my_callback() { 
    alert('done'); 
} 

function validate(cb) { 
    $.ajax({ 
     /* ... */ 
     success: function() { 
      cb(); 
     } 
    }); 
} 

당신이 validate에 전달하는 기능은 success 함수 호출에 따라 실행됩니다.

관련 문제