2015-01-30 2 views
1

Не повезло со следующим кодом jQuery. Предполагается проверить ввод формы для отправки. Пароль установлен правильно. При первом представлении err верно. Отправить второй раз (пароль без изменений), err правильно установлен в false.AJAX JQuery PHP Проверка формы

 var err = true; 
     $("#signupform").submit(function(event) { 
      var span_supassword = $('#span_supassword'); 
      var password  = $("#supassword").val(); 
      $.ajax({ 
       url:  '/apps/ajax/signupvalidate.php', 
       data:  'action=checkpassword&password=' + password, 
       dataType: 'json', 
       type:  'post', 
       success: function (j) { 
        if (j.passwordmsg) { 
         err = true; 
         span_supassword.html(j.passwordmsg); 
        } 
        else { err = false; } 
       } 
      }); 
      if (err) { event.preventDefault(); } 
     }); 

Любые идеи или предложения?

+1

ваши данные не выглядят как JSON мне – Pascamel

+0

Это не должны быть JSON @Pascamel –

+0

Вы смотрели запрос/ответ в консоли вашего браузера Daniel? Есть ли ошибки? –

ответ

1

Вы вызываете «асинхронный» (не синхронизированный = вызов веб-сервера и когда получаете функцию ответа «успех») запрос на веб-сервер и не ждите ответа! Просто проверьте переменную «err» и сначала «submit» по умолчанию «err = true», когда вы нажимаете «отправить», «err» заполняется ответом с веб-сервера, и он показывает реальное значение. Если вы протестируете на локальном веб-сервере ПК, он должен генерировать ответ через ~ 0,1 сек, а затем он вызывает функцию «успех»!]. Очень глупо решением было бы:

err = null; // delete value every call 
var span_supassword = $('#span_supassword'); 

... (JQuery код) ...

while(err == null) 
{// freez web browser until you get answer from server 
} 
if (err) { event.preventDefault(); } 

но это будет FreeZ сайт, пока не получите ответ от веб-сервера. «Изменение» событие 1. Добавить ко всем полям «ввода», которые вы хотите проверить:


Real решение JQuery. 2. Каждое событие «change» выполняет AJAX для проверки текущего значения поля. 3. Сохранить результат проверки переменных, как «validationPasswordField = answerFromAjax» 4. в «Submit» событие выполнить что-то вроде:

if(!validationPasswordField || !validationUsernameField || !validationAcceptedRegistrationRules) 
    { 
// if any validation failed (is 'false') block submit 
    e.preventDefault(); 
    } 
+0

Блестящий, идеальный! 2-е лучшее решение работает красиво. Благодаря! Извините, я не могу оценивать вас выше 1 или оценивать вас больше :) –

Смежные вопросы