2013-04-17 4 views
1

Я проверяю форму на странице регистрации, все работает правильно, за исключением того, что проверка электронной почты немного ударила и пропустила.Форма не отправляется по электронной почте Проверка JSON

Он работает нормально, если я просто проверяю его, чтобы убедиться, что это фактический адрес электронной почты, но когда я пытаюсь добавить чек, чтобы проверить, не работает ли он, я столкнулся с проблемами.

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

Это работает, и форма представляет:

if(filter.test(a)){ 
     email.removeClass("field_error"); 
     emailInfo.text(""); 
     emailInfo.removeClass("error"); 
     return true; 
    } 

Это работает, но форма не представляет:

if(filter.test(a)){ 
     $.post('php/availability.php',{email: $('#email').val()}, function(emaildata){ 
      if(emaildata.exists){ 
       email.addClass("field_error"); 
       emailInfo.text("(Email address in use)"); 
       emailInfo.addClass("error"); 
      } else { 
       email.removeClass("field_error"); 
       emailInfo.text(""); 
       emailInfo.removeClass("error"); 
       return true; 
      } 
     }, 'JSON'); 
    } 

Я в тупик.

+0

Что происходит в электронной почте? –

+0

Он возвращает «существует». {"exists": true}, если быть точным. – Adam

+0

Если он возвращает '{" exists ": true}', тогда ваш адрес электронной почты используется, и форма не должна отправляться. Может быть, я не понимаю правильно. –

ответ

1

Проблема связана с асинхронным вызовом AJAX (первый «A»).

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

Однако в вашем втором примере вы попадаете в блок if, но затем вы асинхронно вызываете веб-ресурс (availability.php). Ваш код вызывает вызов AJAX (звонок $.post()), а затем сразу же попадает в конец вашего блока if. True не возвращается, поэтому ваша форма не отправляется.

Что вам нужно сделать, это:

  • переместить exists===false логику в отдельную функцию;
  • в вашем блоке if, если письмо является действительным, вы вызываете функцию;
  • ваша функция находит форму (скажем, с JQuery), а затем передает его

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

if(filter.test(a)){ 
     $.post('php/availability.php',{email: $('#email').val()}, function(emaildata){ 
      if(emaildata.exists){ 
       email.addClass("field_error"); 
       emailInfo.text("(Email address in use)"); 
       emailInfo.addClass("error"); 
      } else { 
       submitForm(email, emailInfo); 
      } 
     }, 'JSON'); 
    } 

И тогда submitForm() делает что-то вроде:

function submitForm(email, emailInfo){ 
    email.removeClass("field_error"); 
    emailInfo.text(""); 
    emailInfo.removeClass("error"); 
    $('#theForm').submit(); 
} 

Думаю, тогда вы должны увидеть свою форму submit.

Надеюсь, это поможет!

+0

Спасибо за ответ. Тем не менее, есть несколько проверок, которые необходимо выполнить, чтобы вернуть true в форме submit. Будет ли это отменять их и отправить форму? Или это просто отправить другой запрос на отправку, вызвав остальные проверки? – Adam

+0

Если ваша подача зависит от существующего письма, тогда вы должны инкапсулировать это в функцию, которая вызывается при возврате '$ .post'. Является ли это второй функцией, которая вызывается из функции 'submitForm', которую я создал выше, или если все это в одной функции (т. Е. Все ваши проверки в' submitForm'). Следует помнить, что ваш вызов '$ .post' асинхронен, поэтому ваша проверка должна срабатывать после возвращения' $ .post'. Надеюсь, это поможет. –

+0

Хорошо, я буду помнить об этом и посмотреть, что я могу сделать. Спасибо за вашу помощь! – Adam

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