Использование синхронного JAX в регистрационной форме для проверки доступности имени пользователя - PullRequest
0 голосов
/ 25 марта 2012

У меня есть регистрационная форма. Когда я нажимаю кнопку «Отправить», он должен проверить, не занято ли имя пользователя и совпадают ли пароли. Итак, я написал несколько функций: одну, которая проверяет пароли, одну, которая проверяет, доступно ли имя пользователя, и основную функцию, которая вызывает две функции проверки. Функция проверки пароля работает хорошо, но моя проблема с функцией проверки имени пользователя. Это функция:

function checkIsUsernameExist(){
    if($("#txtNewUsername").val() == "") {
        $("#divIsUsernameExist").html("");
        return false;
    } else {
    $.getJSON("inc/API.php", 
        {
            command : 'isUsernameExist',
            username : $("#txtNewUsername").val(),
        },
        function(result)
        {
            if (result != true){
                $("#divIsUsernameExist").html("This username is available!");
                return true;
            } else {
                $("#divIsUsernameExist").html("This username is not available!");
                return false;
            }
        });
    }
}

Когда имя пользователя пусто, оно возвращает False. Но когда вводится какое-то значение, возвращается Undefined. Кто-то сказал, что я должен использовать Synchronous JAX (но не сказал мне, как), поэтому я попытался написать этот код:

function checkIsUsernameExistAsync(){
    if($("#txtNewUsername").val() == "") {
        $("#divIsUsernameExist").html("");
        return false;
    } else {
        $.ajax({
            type: 'POST',
            url: 'inc/API.php',
            data: ({
            command : 'isUsernameExist',
            username : $("#txtNewUsername").val(),
            cache: false,
            async: false
            }),
    success: function(result){
        if (result != true){
                $("#divIsUsernameExist").html("This username is available!");
                return true;
            } else {
                $("#divIsUsernameExist").html("This username is not available!");
                return false;
            }
        }
    });
    }
}

Но я получаю тот же результат - Ложь, когда она пуста, Не определено, когда вводится какое-то значение. Я попытался изменить $.ajax на $.getJSON во второй функции, но все равно получил тот же результат.

Это код из API.php:

case "isUsernameExist":
        echo (isUsernameExist($_REQUEST["username"]));
        break;

он вызывает функцию на включенной странице BusinessLogic.php, вот эта функция:

function isUsernameExist($username)
{
    $arr = select("select * from users where username='$username'");
    if(count($arr) == 1)
    return json_encode(true);
    else
    return json_encode(false);
}

Как я могу заставить его работать ??

Спасибо!

1 Ответ

1 голос
/ 25 марта 2012

Подведем итоги цепочки комментариев:

  • Избегать синхронных запросов AJAX: Удалить async: false
  • Добавить `dataType: 'json',
  • return внутри обработчика success для jQuery.ajax не устанавливает значение возврата внешней функции Чтобы правильно передать результаты, определите обработчик обратного вызова. Заменить:

  • До: http://jsfiddle.net/wGfzc/
  • После: http://jsfiddle.net/wGfzc/2/
...