проверить имя пользователя с помощью bvalidator - PullRequest
0 голосов
/ 17 мая 2011

Почему возвращаемое значение моей функции всегда ложно

это моя функция:

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;
}

Разве переменная не устанавливает значение? Что-то не так с этим? спасибо, прежде чем ..!

Ответы [ 3 ]

2 голосов
/ 17 мая 2011
0 голосов
/ 17 мая 2011

Вы немного запутались в объеме вещей здесь.Вызов 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
        }
    });
}
0 голосов
/ 17 мая 2011

Поскольку вызов 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.');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...