jQuery с удаленной проверкой не ожидает ответа от сервера

#javascript #jquery #jquery-plugins #jquery-validate

#javascript #jquery #jquery-плагины #jquery-validate

Вопрос:

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

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

...

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

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

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

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

 }
  

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

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

Комментарии:

1. Я рвал на себе волосы из-за той же проблемы. Ваш вопрос предоставляет мне промежуточное решение ( while цикл), но было бы неплохо узнать, существует ли лучшее решение.

Ответ №1:

Бесконечный цикл while для переменной validator не является хорошим выбором. Вместо этого используйте приведенный ниже код, который использует таймер 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);
  

Ответ №2:

Трудно сказать, как вы обрабатываете успешные отправки или используете ли вы класс 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
});
  

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

Ответ №3:

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

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

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

Комментарии:

1. не уверен, понимаю ли я, что вы предлагаете. Я думаю, мне нужно более точно указать, что есть что: элемент является docs.jquery.com/Plugins/Validation/Validator/element и удаленный валидатор docs.jquery.com/Plugins/Validation/Methods/remote и конфигурация удаленного средства проверки генерируется asp.net mvc.