В этой статье я хочу показать пример работы с ajax. В качестве примера рассмотрим обычную форма с четырьмя полями — имя, e-mail, пароль и подтверждение пароля. После заполнения полей, с помощью ajax`a отправим данные на сервер и проверим их на корректность: чтобы поля были обязательно заполнены, а также поля с паролем и подтверждением пароля имели одинаковые значения.
Для работы формы необходимо подключить библиотеку jQuery. Приступим к написанию формы. Для начала составим html форму и напишем пару стилей для нее:
<style>
.label_desc{
display: block;
}
.error{
display: none;
}
.error_input{
border: 2px solid #FF0000;
}
</style>
<form action="ajax_index.php" id="form_test" method="post">
<label class="label_desc">Name:</label>
<input type="text" id="name_user"/>
<label id="name_user_error" class="error"></label>
<br/>
<label class="label_desc">E-mail:</label>
<input type="text" id="email_user" />
<label id="email_user_error" class="error"></label>
<br/>
<label class="label_desc">Password:</label>
<input type="password" id="password_user" />
<label id="password_user_error" class="error"></label>
<br/>
<label class="label_desc">Repeat Password:</label>
<input type="password" id="password_2_user" />
<label id="password_2_user_error" class="error"></label>
<br/>
<br/>
<input type="submit" value="Send" id="send_data" />
</form>
Теперь напишем серверный скрипт — ajax_index.php, он будет использоваться для обработки данных. Вот его код:
// массив для хранения ошибок
$errorContainer = array();
// полученные данные
$arrayFields = array(
'name_user' => $_POST['name_user'],
'email_user' => $_POST['email_user'],
'password_user' => $_POST['password_user'],
'password_2_user' => $_POST['password_2_user']
);
// проверка всех полей на пустоту
foreach($arrayFields as $fieldName => $oneField){
if($oneField == '' || !isset($oneField)){
$errorContainer[$fieldName] = 'Поле обязательно для заполнения';
}
}
// сравнение введенных паролей
if($arrayFields['password_user'] != $arrayFields['password_2_user'])
$errorContainer['password_2_user'] = 'Пароли не совпадают';
// делаем ответ для клиента
if(empty($errorContainer)){
// если нет ошибок сообщаем об успехе
echo json_encode(array('result' => 'success'));
}else{
// если есть ошибки то отправляем
echo json_encode(array('result' => 'error', 'text_error' => $errorContainer));
}
И теперь осталось только написать javaScript. Он будет выглядеть вот так:
$(document).ready(function() {
$('#form_test').submit(function(){
// убираем класс ошибок с инпутов
$('input').each(function(){
$(this).removeClass('error_input');
});
// прячем текст ошибок
$('.error').hide();
// получение данных из полей
var name_user = $('#name_user').val();
var email_user = $('#email_user').val();
var password_user = $('#password_user').val();
var password_2_user = $('#password_2_user').val();
$.ajax({
// метод отправки
type: "POST",
// путь до скрипта-обработчика
url: "/ajax_index.php",
// какие данные будут переданы
data: {
'name_user': name_user,
'email_user': email_user,
'password_user': password_user,
'password_2_user': password_2_user
},
// тип передачи данных
dataType: "json",
// действие, при ответе с сервера
success: function(data){
// в случае, когда пришло success. Отработало без ошибок
if(data.result == 'success'){
alert('форма корректно заполнена');
// в случае ошибок в форме
}else{
// перебираем массив с ошибками
for(var errorField in data.text_error){
// выводим текст ошибок
$('#'+errorField+'_error').html(data.text_error[errorField]);
// показываем текст ошибок
$('#'+errorField+'_error').show();
// обводим инпуты красным цветом
$('#'+errorField).addClass('error_input');
}
}
}
});
// останавливаем сабмит, чтоб не перезагружалась страница
return false;
});
});
Вот и все. Ajax-форма с валидацией готова.


Спасибо. друг!
Здравствуй) интересует вопрос куда форма отправляет данные? То есть на какой адрес ел. почты?
Добрый день, в коде серверного скрипта нет отправки на почту — ее можно дописать. В статье описан пример валидации полей
В коде скрипта на языке «Java Script» неверно указано имя файа.
// путь до скрипта-обработчика
url: «/ajax_test.php»,
У меня весь Ajax заработал, когда я заменил эту строку на следующую.
url: «ajax_index.php»,
Косая черта (флеш) тоже помешал «оживанию» формы.
Спасибо, подправил в коде название скрипта на «ajax_index.php». А по поводу слеша перед скриптом — это зависит от того, где будет расположен скрипт. Если разместить его в корне сайта, то работает со слешем, если разместить в папке, то нужно прописывать соответствующий путь.