Не удается получить проверку формы jquery для регистрации элемента $ .post

Я хочу проверить форму, чтобы я мог проверить основы (например, имя пользователя, имя пользователя, минимальную длину и т. Д.), Но также, чтобы я мог гарантировать, что такие вещи, как имя пользователя и адрес электронной почты, еще не были (что требует поиска в базе данных) ,

У меня есть все части, и после игры они сузили его, чтобы найти, что инструкция $. Post , в то время как она предназначена для добавления в счетчик «fail», не делает этого. Как я могу получить какую-то форму вывода из строки $. Post , чтобы я мог действительно подтвердить (потому что прямо сейчас, даже если имя пользователя недоступно, оно отправит форму).

Here is my <script> (although for simplicity shortened to just show the username piece). Note that 'usernameoff' is my error block:

function validateForm()
{
  //set variables
   var username=document.forms["registrationnew"]["username"].value;
   var usernamespace=username.indexOf(" ");

  //set fail counter variable to determine if any requirements failed
   var counter=0;

  //check that username isn't blank, containing spaces, too short, or taken
   if (username==null || username=="")
   {
      counter++;
      $('#usernameoff').html("Must enter a username");
   }
   else if (username.indexOf(" ") >= 0)
   {
      counter++;
      $('#usernameoff').html("Cannot contain spaces");
   }
   else if (username.length < 3)
   {
      counter++;
      $('#usernameoff').html("Must be at least three characters");
   }
   else
   {
      $.post("check_username.php", {username: username}, function(result)
      {
         if(result == 0)
         {
            $('#usernameoff').html("Available");
         }
         else
         {
            counter++;
            $('#usernameoff').html("Not available");
         }
      });
   }  

  //if any test failed, return false
   if (counter > 0)
   {
      document.getElementById("errorflag").innerHTML=counter;
      return false;
   }
}

$.post conducts a query to determine whether or not the username entered has already been taken (and returns 0 or 1). My issue is that, regardless of which it returns, it does not increment 'counter', and therefore the form still submits.

2
nl ja de

1 ответы

Your final test (if (counter > 0)) will run before your AJAX call has returned. This is the 'asynchronous' part of AJAX.

Простейшим решением в вашем случае является замена $. Post на синхронный вызов:

$.ajax({
  type: "POST",
  url: "check_username.php", 
  data: {'username': username},
  async: false,
  success: function(result) { /* ... */ }
});

Это вызовет задержку, пока ваш скрипт ждет возврата, но поскольку он находится на вашем собственном сервере, эта задержка должна быть довольно минимальной.

(Синхронные вызовы не всегда возможны. Прочтите документы для .ajax() для получения дополнительной информации.)

1
добавлено
Большое спасибо, эта проблема вчера меня убила, и я просто пробовал это с успехом. Я кодирую свой первый веб-сайт (прошел 1 курс семестрового кодирования и поймал ошибку), так что это все большой опыт обучения. Спасибо тонну снова.
добавлено автор cschippe, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском