Я только что обнаружил, что плагины проверки jQuery имеют правило проверки, называемое «удаленным», которое можно использовать для выполнения запроса ajax вместо указания настраиваемого правила, для которого вызывается ajax. Это сэкономит вам кучу времени с этими пользовательские правила проверки . Базовое руководство по проверке формы jQuery (2 минуты) .
Пример: проверка, если электронная почта пользователя уже зарегистрирована.
Новый способ удаленного доступа
Как видите, для передачи данных вы можете просто использовать синтаксис пары ключей, поэтому запрос, отправленный ниже данных, называется «&[email protected]». Возвращаемые значения для вашего внутреннего сценария — либо json-код true для прохода проверки, либо html msg для сбоя проверки.
//VALIDATE USER EMAIL $(':input[name="uAcc"]').rules("add", { "remote" : { url: 'validateEmail.php', type: "post", data: { emails: function() { return $('#register-form :input[name="email"]').val(); } } } });
Старый способ добавления пользовательских методов
//VALIDATE USER EMAIL $.validator.addMethod("validateUserEmail", function(value, element) { var inputElem = $('#register-form :input[name="email"]'), data = { "emails" : inputElem.val() }, eReport = ''; //error report $.ajax( { type: "POST", url: validateEmail.php, dataType: "json", data: data, success: function(data) { if (data !== 'true') { return '
Этот адрес электронной почты уже зарегистрирован.
«; } еще { вернуть истину; } }, ошибка: функция (xhr, textStatus, errorThrown) { alert ('ошибка загрузки ajax ... ...' + url + query); вернуть ложь; } }); }, ''); $ (': input [name = "email"]'). rules ("add", {"validateUserEmail": true});
Backend PHP Script
< ?php /* check if email is already registered */ //connect to db using mysqli if (!empty($_POST['email'])) { $email = $mysqli->real_escape_string($_POST['email']); $query = "SELECT ID FROM users WHERE user_email = '{$email}' LIMIT 1;"; $results = $mysqli->query($query); if($results->num_rows == 0) { echo "true"; //good to register } else { echo "false"; //already registered } } else { echo "false"; //invalid post var } ?>
Еще один пример, чтобы помочь
/* register script */ (function($,W,D,undefined) { $(D).ready(function() { //form validation rules $("#register-form").validate({ rules: { email: { required: true, email: true, "remote": { url: 'validateEmail.php', type: "post", data: { email: function() { return $('#register-form :input[name="email"]').val(); } } } }, name: { required: true, minlength: 3 }, password: { required: true, minlength: 8 }, password_repeat: { required: true, equalTo: password, minlength: 8 } }, messages: { email: { required: "Please enter your email address.", email: "Please enter a valid email address.", remote: jQuery.validator.format("{0} is already taken.") }, name: "Please enter your name.", password: "Please enter a password.", password_repeat: "Passwords must match." }, submitHandler: function(form) { form.submit(); } }); }); })(jQuery, window, document);
Остановка удаленной проверки при вводе
По умолчанию плагин проверки отправляет ajax-запрос для удаленного правила при каждом нажатии клавиши, что приводит к отправке слишком большого количества ajax-запросов для проверки полей. Один из способов отключить это — отключить проверку onkeyup, чтобы удаленное правило проверялось только через ajax, когда вы закончили вводить данные.
$("#register-form").validate({ onkeyup: false //turn off auto validate whilst typing });