2013-07-06 3 views
1

Ajax를 사용하는 jQuery 함수가 있습니다. 항상 undefined을 반환하며 이유를 파악할 수 있습니다.Ajax를 반환하는 jQuery 함수가 정의되지 않음

$.post 함수에 등록 된 변수에 경고를 보내면 작동하지만 그렇지 않으면 작동하지 않습니다.

function signup(){ 

    var username = $('#su-username').val(); 
    var password = $('#su-password').val(); 

    if(username!='' && password!=''){ 

     $.post("register.php", { user: username, pass: password }).done(function(response){ 

      if($.trim(response)=='1'){ 
       alert('Username Taken, Please choose another'); 
       var registered = 0; 
      }else{ 
       var registered = 1; 
      } 

     }); 

    } else { 

     alert('Username and password cannot be empty'); 
     var registered = 0; 
    } 
    return registered; 
} 

답변

3

을 정의되지지고있다 코드를 계속하는 것은 콜백을 사용하도록 권장 기능. 예를 들면 :

나는 이미 내가 ('사용자 이름이 서로를 선택하십시오 촬영') 경고를받을 촬영되는 사용자 이름을 등록하려고하면 때문에 사실 어차피
function signup(callback) { 

    var username = $('#su-username').val(), 
     password = $('#su-password').val(), 
     registered = 0; 

    if (username != '' && password != '') { 

     $.post("register.php", { user: username, pass: password }).done(function(response) { 
      if ($.trim(response) == '1') { 
       alert('Username Taken, Please choose another'); 
      } 
      else { 
       registered = 1; 
      } 

      // Delayed callback invocation after AJAX request 
      callback(registered); 
     }); 
    } 
    else { 
     alert('Username and password cannot be empty'); 
     callback(registered); // Immediate invocation of the callback function 
    } 
} 

signup(function(ok) { 
    if (ok) alert('Ok!'); 
    else alert('Not ok!'); 
}); 
+0

멋지게 설명했습니다! –

2

코드 실행을 완료하기 전에 변수를 경고합니다. 값이 반환되면 사용할 수있는 AJAX 호출 대신 성공시 함수를 사용하십시오. 당신이 AJAX와 같은 비동기 작업을 처리 할 때 AJAX 호출이 완료 될 때까지 순간

, 당신이 기다리고되지 않습니다, 당신은 왜

+0

; 등록 된 변수를 설정하는 블럭과 동일한 경우? – user550

+0

@ user550 그리고 그 시점에서'등록 '을 경고하면? –

+0

내가 정의되지 않음 – user550

관련 문제