jQuery Validator не удается отправить с пользовательским методом с использованием ajax - PullRequest
1 голос
/ 06 июля 2011

Итак, у меня есть собственный валидатор, проверяющий введенный почтовый индекс по моей базе данных допустимых почтовых индексов.

Мой пользовательский метод выглядит следующим образом:

jQuery.validator.addMethod("validZip", function(value, element){
    var _id = $(element).attr("id");
    $.post(
        '/xpress/wp-admin/admin-ajax.php',
        {action:"test_checkZip", zip:value},
        function(response){
            if (result == 0){
                return false;
            } else {
                return true;
            }
        }
    );
}, '*');

Проблема, на мой взгляд, состоит в том, что, поскольку ajax не блокирует задержку запроса, он не возвращает истинный / ложный результат для валидатора во время его распознавания.

Всякий раз, когда результат должен быть истинным, он не может скрыть сообщение об ошибке, и форма не может быть отправлена.

Мне удалось скрыть сообщение об ошибке в блоке возврата истинного кода, явно скрыв элемент ошибки. Сообщение об ошибке скрывается, однако , форма по-прежнему возвращает false, поскольку пользовательский метод не может вернуть true.

Я сделал что-то не так? Как я могу обойти эту проблему?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Вы можете использовать синхронное восстановление, используя $.ajax

jQuery.validator.addMethod("validZip", function(value, element){
    var _id = $(element).attr("id");
    var return_val = null;
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        type: 'post',
        data: {action:"test_checkZip", zip:value},
        async: false,  //This does the trick
        success: function(response){
            if (result == 0){
                return_val = false;
            } else {
                return_val = true;
            }
        }
    });
    return return_val;
}, '*');

Надеюсь, это поможет.Приветствия

0 голосов
/ 06 июля 2011

Если вы используете $.ajax() вместо этого, вы можете указать POST, который будет выполняться синхронно, а не асинхронно.

$.ajax({
    url: '/xpress/wp-admin/admin-ajax.php',
    type: 'POST',
    data: {action:"test_checkZip", zip:value},
    async: false,
    success: function(response){
        // Process response..
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...