2011-05-17 112 views
0

爲什麼我的函數的返回值始終爲false檢查用戶名與bvalidator

這是我的函數:

function checkUsername(username) { 
    var ret=false; 
    $.ajax({ 
     type: "POST", 
     url: "user_validate.php", 
     async: true, 
     data: "username="+username, 
     success: function(data){ 
      if(data == 0){ 
       ret = true; 
      }else{ 
       ret = false; 
      } 
     }, 
     error:function() { 
      alert("ERROR"); 
     } 
    }); 
    return ret; 
} 

是VAR RET不設置值? 它有什麼問題..? 謝謝..!

回答

0

因爲AJAX調用asynchronpous,所以你返回ret值會被分配之前。

使用回調方法來處理結果:

function checkUsername(username, callback) { 
    var ret=false; 
    $.ajax({ 
    type: "POST", 
    url: "user_validate.php", 
    async: true, 
    data: "username="+username, 
    success: function(data){ 
     callback(data == 0); 
    }, 
    error:function() { 
     alert("ERROR"); 
    } 
    }); 
} 

用法:

checkUsername(username, function(success){ 
    if (success) { 
    alert('User name is valid.'); 
    } else { 
    alert('User name is not valid.'); 
    } 
}); 
0

你對這裏的東西範圍有點困惑。 ajax調用是異步的,所以在它應答的時候,它不再與它被調用的函數有關。你真正想要做的是設置某種事件監聽器或(我的首選方法)回調。

另外,請你幫個忙,並使用縮短的語法$。員額():http://api.jquery.com/jQuery.post/

function checkUsername(username) { 
    $.post("user_validate.php", "username=" + username, function(data) { 
     if (data == 0) { 
      // Update DOM or element, or whatever you want to do 
     } else { 
      // Handle negative result 
     } 
    }); 
} 
+0

爲什麼這個downvoted ....並且遠遠超過一年前,當它是正確的嗎? – dtbarne 2012-06-19 20:09:50