2012-09-02 7 views
0

변수에 값을 설정하는 데 문제가 있습니다. 내 코드는 아래와 같습니다.자바 스크립트 함수에서 변수 설정

function fpform(){ 
var response_new = ''; 
var password_reset = ""; 
var fpemail = $('#frgtpwd').val(); 
//var fpemail = document.getElementById('frgtpwd').value; 

if (fpemail == ""){ 
    $('span#fperror').text("insert your emal address"); 
    //document.getElementById('fperror').innerHTML = "Insert your email address"; 
    password_reset = 'no'; 
} else { 
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
    if (filter.test(fpemail)==false) { 
     $('span#fperror').text("Email address is not in valid format"); 
     //document.getElementById('fperror').innerHTML = "Email address is not in valid format"; 
     password_reset = 'no'; 
    } else { 
     $("#loader").html('<img src="images/ajax-loader.gif" />'); 
     $.post("forgot_password_process.php", { 
      email:fpemail 
     }, function(response){ 
      response_new = response.trim(); 
     }).success(function() { 
      if (response_new == 'yes'){ 
       $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>'); 
       $("#loader").empty(); 
       password_reset = 'yes'; 
      } else { 
       $("#loader").empty(); 
       $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>'); 
       password_reset = 'no'; 
      } 
     }); 
    } 
} 

if (password_reset == "yes"){ 
    alert(password_reset); 
    return true; 
} else { 
    alert(password_reset); 
    return true; 
} 
} 

마지막 조건은 password_reset 변수가 yes 또는 no로 설정되어 있는지 확인하고 그에 따라 true 또는 false를 반환합니다. 그러나 경고는 password_reset 변수의 빈 값을 표시합니다. password_reset 변수가 마지막에 도달하기 전에 할당되어야하므로이 문제는 해결할 수 없습니다. 누구든지 해결책을 제안 할 수 있습니까? 당신이 데이터를 경고 할 때 요청이 완료되지 않은 그 때문에 친절 감사

+0

왜 함수에서 true/false를 반환합니까? 이 기능을 사용하려면 전체 기능을 동기식으로 만들어야합니다. 그렇지 않으면 AJAX 호출이 완료되기 훨씬 전에 반환됩니다. –

답변

4

$.post()

는 비동기입니다. 이 기능을 사용하려면 성공 콜백 내에서 경고를 호출해야합니다. 경고를하기 전에 데이터가 있는지 확인해야합니다. 또 다른 옵션은 동기식 AJAX 호출을 사용하는 것입니다 (이것은 거의 좋은 옵션이 아닙니다).

업데이트

확실하지 왜 함수 반환 참/거짓,하지만 작동하려면, 당신은, 동기 AJAX 호출을 할 것이다, 그렇지 않으면 외부 기능은 AJAX 호출 오래 전에 돌아갑니다 그 시점에서 응답이 무엇인지 모릅니다.

아마도 코드를 다시 작성하여 success-callback에 의해 호출 할 수있는 외부 함수의 응답에 의존하는 코드를 만들어야합니다.

+0

http://stackoverflow.com/a/5821467/586134는 동기식 게시물이 jquery에서 어떻게 수행되는지 보여줍니다. – rahul

-1

나는 크리스토퍼 (Christofer)와 같은 것을 올릴 예정이었습니다. 다음은 고정 된 코드 샘플입니다. 마지막 코드 블록도 제거하십시오.

.success(function() { 
     if (response_new == 'yes'){ 
      $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>'); 
      $("#loader").empty(); 
      password_reset = 'yes'; 
      alert 'yes'; 
      return true; 
     } else { 
      $("#loader").empty(); 
      $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>'); 
      password_reset = 'no'; 
      alert 'no'; 
      return false; 
     } 
+0

이와 같이 반환 값은 외부 함수에 도달하지 않습니다. –

+0

여기에 게시하기 전에 이미 시도한대로 작동하지 않습니다. – Sahil

+0

여전히 다른 함수 호출이됩니다. – rahul

관련 문제