用bvalidator检查用户名

时间:2011-05-17 05:05:30

标签: jquery ajax function

为什么我的函数的返回值总是为假

这是我的功能:

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是不是设置了值? 有什么问题..? 谢谢之前..!

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

因为AJAX调用是异步的,所以在分配之前返回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.');
  }
});

答案 2 :(得分:0)

你对这里的事情范围有点困惑。 ajax调用是异步的,所以当它回答时,它不再与调用它的函数有任何关系。你真正想要做的是设置某种事件监听器或(我的首选方法)回调。

另外,请帮自己一个忙,并使用缩短的语法$ .post():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
        }
    });
}