2011-05-15 11 views
0

아약스 요청에서 양식 제출 기능에 값을 반환하려고합니다.함수에 아약스 반환 값 문제

코드는 다음과 같습니다 : 양식에

function validateEmail(){ 
     if(email.val() == "") 
     { 
      $("#emailerror").html("Enter Email..."); 
      return false; 
     } 
     else { 
     $.ajax({ 
      type: "POST", 
      data: "email="+email.val(), 
      url:'emailcheck.php', 
      beforeSend: function(){ 
       $("#emailerror").html("Checking Email..."); 
      }, 
      success: function(data){ 
       if(data == "invalid") 
       { 
        $("#emailerror").html("Invalid Email"); 
        return false; 
       } 
       else if(data != "0") 
       { 
        $("#emailerror").html("Email Already Exist"); 
        return false; 
       } 
       else 
       { 
        $("#emailerror").html("OK"); 
        return true; 
       } 
      } 
     }); 
     } 
    } 

, 난 함수를 호출하고 아약스 응답에서 반환 값을 확인하고 제출

$('#myForm').submit(function(){ 
     if(validateEmail()) 
     { 
      alert('returning true'); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
}); 

그러나이 코드는 때 실행되지 않습니다 반환 값은 'true'입니다. validateEmail() 함수는 false를 반환합니다.

Pls 내가 내가 어디로 갔는지 알아 내려고 도와줍니다.

미리 감사드립니다. 어쩌면이 같은

답변

0

AJAX의 "A"는 "비동기"을 의미합니다.

else 분기가 validateEmail 인 경우 emailcheck.php으로 비동기 요청을 시작합니다. validateEmail을 반환하기 전에 PHP 파일이 응답합니다. emailcheck.php 스크립트가 응답하지만 jQuery는 success 콜백을 호출하지만 아무도 반환하지 않는 콜백을 전달합니다. 그 결과는 지금까지 양식 유효성 검사에 관한 한, 당신의 validateEmail이 보이는 것입니다 : 당신은 $.ajaxasync:false 옵션을 시도하거나 반환하는 비동기 요청을 기다릴 수 있도록 모든 논리를 재 작업 할 수

function validateEmail() { 
    if(email.val() == "") { 
     $("#emailerror").html("Enter Email..."); 
     return false; 
    } 
    else { 
     // Your $.ajax() might as well not even be here as 
     // validateEmail will return before $.ajax() gets a 
     // response from emailcheck.php 
     return; 
    } 
} 

.

또한 validateEmail의 두 번째 분기는 false을 반환하지 않지만 전혀 반환하지 않지만 여전히 참값이 아닙니다.

0
if(data == "invalid") 
      { // id data = invalid it good 
       $("#emailerror").html("Invalid Email"); 
       return false; 
      } 
      else if(data != "0") //if data == good it work :) it is error 
      { 
       $("#emailerror").html("Email Already Exist"); 
       return false; 
      } 
      else 
      { 
       $("#emailerror").html("OK"); 
       return true; 
      } 

는 :

if(data == "invalid") 
      { // id data = invalid it good 
       $("#emailerror").html("Invalid Email"); 
       return false; 
      } 
      else if(data == "good") //if data == good it work :) it is error 
      { 
       $("#emailerror").html("OK"); 
       return true; 
      } 
      else 
      { 
       $("#emailerror").html("Email Already Exist"); 
       return false; 
      } 
0

나는 당신이 validateEmail()에 대한 호출에서 리턴 값으로 정의되지 않는다고 생각한다. ajax 요청이 비동기 적으로 완료되고 결과를 얻기 전에 validateEmail() 함수가 종료되기 때문입니다. 한 가지 해결책 (내 생각에 나쁜)은 ajax 요청에서 async 옵션을 false로 설정하는 것입니다.

$.ajax({ 
     type: "POST", 
     data: "email="+email.val(), 
     url:'emailcheck.php', 
     async: false, 
     beforeSend: function(){ 
      $("#emailerror").html("Checking Email..."); 
     } 

그렇지 않으면 이것을 권하고 싶습니다. 제출 호출을 트리거하면 대신 validateEmail()을 트리거 한 다음 거기에서 submit을 호출 할 수 있습니다.

validateEmail(); //Instead of trigger submit you call this function.  

function validateEmail(){ 
    if(email.val() == "") 
    { 
     $("#emailerror").html("Enter Email..."); 
     return false; 
    } 
    else { 
    $.ajax({ 
     type: "POST", 
     data: "email="+email.val(), 
     url:'emailcheck.php', 
     beforeSend: function(){ 
      $("#emailerror").html("Checking Email..."); 
     }, 
     success: function(data){ 
      if(data == "invalid") 
      { 
       $("#emailerror").html("Invalid Email"); 
       return false; 
      } 
      else if(data != "0") 
      { 
       $("#emailerror").html("Email Already Exist"); 
       return false; 
      } 
      else 
      { 
       $("#emailerror").html("OK"); 
       $('#myForm').submit(); //Here you trigger submit. 
       return true; 
      } 
     } 
    }); 
    } 
} 

아마 다른 검증 기능이 있지만 나는이 기능을 관리 할 수있을 것이라고 생각합니다.

+0

감사합니다 john .. u가 내 하루를 저장했습니다. – prajan

+1

그럼 당신은 아마 당신이했던 것보다는 그의 대답을 받아 들여야합니까? – psynnott