Статьи

Отправить форму без обновления страницы с помощью jQuery

Ранее в Nettuts + Филон показал, как можно использовать jQuery для добавления проверки формы в комментарии WordPress, которая работает без перезагрузки страницы. Еще один замечательный способ использования jQuery для повышения удобства работы пользователей — это не просто проверить, но и отправить форму полностью без обновления страницы.

В этом уроке я покажу вам, как легко это сделать — отправьте контактную форму, которая отправляет электронное письмо, без обновления страницы с помощью jQuery! (Фактическое письмо отправляется с помощью php-скрипта, который обрабатывается в фоновом режиме). Давайте начнем.

Если вы хотите получить готовое решение, попробуйте Ultimate PHP, HTML5 & AJAX Contact Form или просмотрите другие скрипты форм для продажи на Envato Market.

Формы на рынке Envato
Скрипты форм и плагины для продажи на Envato Market

В этом примере у нас есть простая контактная форма с именем, адресом электронной почты и номером телефона. Форма отправляет все поля в php-скрипт без обновления страницы, используя встроенные функции jQuery (собственное значение, вам не нужно загружать дополнительные плагины, чтобы это работало.

Если вы нашли эту статью без какого-либо предварительного знакомства с jQuery, отличным местом для начала была бы статья Джеффри Уэя о 15 ресурсах, которая поможет вам начать работу с jQuery From Scratch .


Давайте посмотрим на нашу HTML-разметку. Мы начнем с нашей основной HTML-формы:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<div id=»contact_form»>
 <form name=»contact» action=»»>
   <fieldset>
     <label for=»name» id=»name_label»>Name</label>
     <input type=»text» name=»name» id=»name» size=»30″ value=»» class=»text-input» />
     <label class=»error» for=»name» id=»name_error»>This field is required.</label>
      
     <label for=»email» id=»email_label»>Return Email</label>
     <input type=»text» name=»email» id=»email» size=»30″ value=»» class=»text-input» />
     <label class=»error» for=»email» id=»email_error»>This field is required.</label>
      
     <label for=»phone» id=»phone_label»>Return Phone</label>
     <input type=»text» name=»phone» id=»phone» size=»30″ value=»» class=»text-input» />
     <label class=»error» for=»phone» id=»phone_error»>This field is required.</label>
      
       <br />
     <input type=»submit» name=»submit» class=»button» id=»submit_btn» value=»Send» />
   </fieldset>
 </form>
 </div>

Вы можете заметить, что я включил div с идентификатором contact_form, который охватывает всю форму.
Обязательно не пропустите этот div в своей собственной форме, так как позже нам понадобится этот div-упаковщик. Вы
Я также мог бы заметить, что я оставил поля действия и метода в теге формы пустыми. Мы
на самом деле ни один из них здесь не нужен, потому что jQuery позаботится обо всем этом позже.

Еще одна важная вещь, которую необходимо включить, — это значения идентификаторов для каждого поля ввода. Значения идентификатора
это то, что ваш jQuery-скрипт будет искать для обработки формы.

Я добавил несколько стилей CSS и фоновое изображение в Photoshop, чтобы получить следующую форму:


Следующий шаг в этом процессе — добавить код jQuery. Я предполагаю, что вы загрузили jQuery , загрузили на свой сервер и ссылаетесь на него на своей веб-странице .

Затем откройте еще один новый файл javascript, укажите его в своем html-файле так же, как в обычном файле JavaScript,
и добавьте следующее:

Первая функция () выполняет загрузку событий внутрь, как только готов HTML-документ. Если вы ранее выполняли какую-либо работу в jQuery, эта функция аналогична функции document.ready в jQuery. Итак, мы начинаем с этого, и внутри у нас есть функция click, которая выполняется при нажатии кнопки submit с именем класса «button». В конечном итоге, с помощью этих строк кода мы достигли того же результата, что и добавление события onclick к кнопке отправки в html. Причина, по которой мы делаем это с помощью jQuery, заключается в чистом отделении нашей презентации от наших сценариев.


Внутри нашей функции, которая загружается, когда страница готова, мы добавляем некоторую проверку формы. Но первое, что вы видите, что это было добавлено, это $ (‘. Error’). Hide () ;. Это скрывает наши 3 метки с именем класса «error». Мы хотим, чтобы эти ярлыки были скрыты не только тогда, когда
страница сначала загружается, но также и при нажатии кнопки «Отправить», если одно из сообщений ранее было показано пользователю. Каждое сообщение об ошибке должно появляться только в том случае, если проверка не работает.

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

Чтобы объяснить более подробно, как мы это делаем, мы устанавливаем переменную ‘name’ в значение поля ввода с идентификатором «name» — все с одной строкой jQuery:

Затем мы проверяем, является ли это значение пустым, и если это так, мы используем метод show () jQuery, чтобы показать метку с
id «name_error»:

Затем мы помещаем фокус формы обратно в поле ввода с идентификатором «name» и, наконец, возвращаем false:

Обязательно верните false в своем коде, иначе вся форма будет отправлена ​​(что побеждает
цель этого урока)! Что возвращает false, так это то, что он мешает пользователю продолжить работу
без заполнения обязательных полей.


Теперь мы переходим к сути учебника — отправляем нашу форму без обновления страницы, которая отправляет значения формы в php-скрипт в фоновом режиме. Давайте сначала посмотрим на весь код, а затем я расскажу подробнее. Добавьте следующий код чуть ниже фрагмента проверки, который мы добавили ранее (и до того, как функция нажатия кнопки будет закрыта):

У нас здесь много чего происходит! Давайте разберем все это — это так просто и так легко использовать, когда вы поймете процесс. Сначала мы создаем строку значений, которые являются всеми значениями формы, которые мы хотим передать сценарию, отправляющему электронное письмо.

Напомним, ранее мы установили переменную «name» со значением поля ввода с идентификатором «name», например:

Мы можем использовать это значение «name» снова, а также значения «email» и «phone», чтобы создать нашу dataString:

Я закомментировал предупреждение, которое иногда использую, чтобы убедиться, что я подбираю правильные значения, которые могут оказаться полезными в процессе. Если вы раскомментируете это предупреждение и протестируете свою форму, предполагая, что все прошло хорошо, вы должны получить сообщение, подобное следующему:

Теперь мы добрались до нашей главной функции ajax, звезды сегодняшнего шоу. Здесь происходит все действие, так что платите
пристальное внимание!

По сути, в коде происходит следующее: функция .ajax () обрабатывает значения из нашей строки с именем dataString (data: dataString) с помощью php-скрипта с именем process.php (url: «bin / process.php»), используя метод «POST» (тип: «POST»). Если наш скрипт успешно обработан, мы можем отобразить сообщение обратно пользователю и, наконец, вернуть false, чтобы страница не перезагружалась. Это оно! Весь процесс обрабатывается прямо в эти несколько строк!

Здесь вы можете сделать более сложные вещи, кроме отправки электронного письма и сообщения об успехе. Например, вы можете отправить свои значения в базу данных, обработать их, а затем отобразить результаты обратно пользователю. Таким образом, если вы разместили опрос пользователей, вы можете обработать их голос, а затем вернуть результаты голосования, причем все это без обновления страницы.

Давайте подведем итог тому, что произошло в нашем примере, чтобы быть уверенным, что мы рассмотрели все. Мы захватили значения нашей формы с помощью jQuery, а затем поместили их в строку следующим образом:

Затем мы использовали функцию jjuery ajax для обработки значений в dataString. После того
процесс завершается успешно, мы отображаем сообщение обратно пользователю и добавляем return false, чтобы наша страница не обновлялась:

Успешная часть сценария была заполнена определенным контентом, который может быть отображен обратно пользователю. Но что касается нашей функциональности ajax, это все, что нужно сделать. Для получения дополнительных опций и настроек обязательно ознакомьтесь с документацией jQuery по функции ajax . Пример здесь — одна из более простых реализаций, но, несмотря на это, она очень мощная, как вы можете видеть.


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

Во-первых, мы изменим все содержимое элемента contact_form (помните, я сказал, что нам понадобится этот элемент div) следующей строкой:

То, что это сделало, заменило все содержимое внутри div contact_form, используя функцию jQuery html (). Таким образом, вместо формы, у нас теперь есть новый div внутри с идентификатором «message». Затем мы заполняем этот div реальным сообщением — h2, говорящим «Форма отправки отправлена»:

Затем мы добавляем еще больше содержимого к сообщению div с помощью функции jQuery append (), и, в довершение всего, добавляем классный эффект, скрывая сообщение div с помощью функции jQuery hide (), а затем постепенно добавляем все это с помощью fadeIn (). функция:

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

К настоящему времени, я думаю, вы должны согласиться с тем, что отправлять формы без обновления страницы невероятно легко, используя мощную функцию jjuery ajax. Просто получите значения в вашем файле javascript, обработайте их с помощью функции ajax и верните false, и все готово. Вы можете обрабатывать значения в вашем php-скрипте так же, как и в любом другом php-файле, с той лишь разницей, что пользователю не нужно ждать обновления страницы — все это происходит в фоновом режиме.

Таким образом, если у вас есть контактная форма на вашем веб-сайте, форма входа в систему или даже более сложные формы, которые обрабатывают значения через базу данных и извлекают результаты обратно, вы можете сделать все это легко и эффективно, и, что наиболее важно, вы улучшите конечного пользователя опыт работы с вашим сайтом, предоставляя интерактивность без необходимости ждать перезагрузки страницы.

Я хотел бы добавить несколько заключительных слов о демонстрационном примере. В демоверсии вы можете заметить, что на самом деле используется один плагин — файл runonload.js. В начале урока я заявлял, что мы не будем использовать какие-либо плагины, а затем вы обнаружите, что в демоверсии есть дополнительный скрипт runonload, поэтому некоторые пояснения могут понадобиться! Для тех, кто заинтересован в демонстрации живой рабочей демо-версии, вы можете просмотреть форму SEO-консультации моего сайта.

Единственное использование, которое я сделал с runonload, на самом деле не имеет ничего общего с обработкой формы. Таким образом, вы можете выполнять функции AJAX полностью без каких-либо дополнительных плагинов. Я использовал runonload только для фокусировки поля ввода имени при загрузке страницы. По моему опыту, вызов runonload иногда может быть лучшей заменой встроенной функции jQuery для работы с документами, и я обнаружил, что так оно и есть при создании этого учебника. По какой-то причине функция focus () не будет работать при загрузке страницы с использованием встроенной функции готовности документов jQuery, но она работала с runonload, и поэтому вы найдете ее в качестве примера. Так что если вы знаете способ достичь этого без использования runonload, я был бы рад услышать от вас об этом.

Мы создали полное руководство, которое поможет вам изучить JavaScript , независимо от того, начинаете ли вы как веб-разработчик или хотите изучать более сложные темы.