JQuery с удаленной проверкой не ждет ответа от сервера - PullRequest
1 голос
/ 03 мая 2011

Я заметил, что иногда мой код проверки работает неправильно:

var $validator = $("#checkoutForm").validate();

...

if (!$validator.element($sameShippingAddress)) {
     ...       
}

Отладка с помощью Firebug показала, что иногда $ validator.element ($ sameShippingAddress) возвращал undefined (я думаю, это просто не работаетдождитесь ответа) и это будет считаться ложным, даже если элемент действителен.

Если добавить код, подобный этому, перед оператором if, все работает нормально:

 while (validator.element($sameShippingAddress) !== undefined) {

 }

Вопросесли это правильное решение и нет лучшего способа решить проблему с помощью самого плагина проверки?

Обновление: я использую http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Ответы [ 3 ]

1 голос
/ 28 апреля 2012

Бесконечный цикл while для переменной валидатора не является хорошим выбором. Вместо этого используйте код ниже, который использует таймер Javascript. Вы можете отобразить анимированную графику обработки / ответа сервера после метода validate ().

var validator = $('#resetpassword').validate({///your code...})

    doTimer();

    function timedCount()
    {
        t=setTimeout("timedCount()",1000);
    }

    function doTimer()
    {
    if (validator === undefined)
      {
        timedCount();
      }
    }

if(validator==true)
    $('#form').ajaxSubmit(options);
1 голос
/ 28 апреля 2012

Трудно сказать, как вы обрабатываете успешные представления или используете ли вы класс css для обозначения обязательных полей, но вот что это делается в демо для плагина:

$.validator.setDefaults({
    // code to be executed on submit
submitHandler: function() { alert("submitted, replace this with your server request");}
});

$().ready(function() {
    // validate the comment form when it is submitted
        // use css class .required for fields you want the validator to check
        // if your form is valid then it is handled by the submitHandler
        // if not the plugin displays error messages
    $("#checkoutForm").validate();
    //validate can take a block for custom validation and error messages
});

Надеюсь, это поможет вам найти решение, а не просто то же самое (также только что понял, что этому вопросу год, но я уже написал это так ...)

0 голосов
/ 03 мая 2011

Очевидно, это не лучшее решение.Вместо этого добавьте

if (! $ Validator.element ($ sameShippingAddress)) {...
}

в функции обратного вызова Ajax.

...