Я создаю форму регистрации, которая отправляется через плагин формы JQuery. Я пытаюсь проверить поля формы через ajax с помощью внутреннего файла php. Вот мой Javascript. Он работает только в том случае, если я установил его для возврата false, независимо от того, что в противном случае он отправит его без проверки, если я верну его true.
$(document).ready(function(){
$(".close_pop").click(function(){
$("#rc").fadeOut("slow");
});
var options = {
target: '.container',
beforeSubmit: validate
};
$('#register_form_id').submit(function() {
// inside event callbacks 'this' is the DOM element so we first
// wrap it in a jQuery object and then invoke ajaxSubmit
$(this).ajaxSubmit(options);
// !!! Important !!!
// always return false to prevent standard browser submit and page navigation
return false;
});
});
function validate(formData, jqForm, options) {
var fn = $('input[@name=first_name]').fieldValue();
var ln = $('input[@name=last_name]').fieldValue();
var e = $('input[@name=maile]').fieldValue();
var p = $('input[@name=pass]').fieldValue();
var url = "/register/validate?first = " + fn + "&last = " + ln + "&email = " + e + "&pass = " + p;
if (!fn[0]) {
$("#fn").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter your first name.");
return false;
}
if (!ln[0]) {
$("#ln").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter your last name.");
return false;
}
if (!e[0]) {
$("#e").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter a valid email address (e.g. [email protected].)");
return false;
}
if (!p[0]) {
$("#p").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter a valid password (It must be at least 6 characters.)");
return false;
}
$.get(url ,
function(data){
if (data == 'ng') {
$(".error").fadeIn("slow");
$(".error").html("We are experiencing technical issues. Please try again later.");
return false;
} else if (data == 'f') {
$("#fn").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter your first name.");
return false;
} else if (data == 'l') {
$("#ln").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter your last name.");
return false;
} else if (data == 'e') {
$("#e").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter a valid email address (e.g. [email protected].)");
return false;
} else if (data == 'e_u') {
$("#e").focus();
$(".error").fadeIn("slow");
$(".error").html("This email address appears to be registered.");
alert(data);
return false;
} else if (data == 'p') {
$("#p").focus();
$(".error").fadeIn("slow");
$(".error").html("Please enter a valid password (It must be at least 6 characters.)");
return false;
} else if (data == 'y') {
return true;
} else {
return false;
}
});
return false;
}
Файл php повторяет определенные ключевые слова или буквы, чтобы сообщить, возникла ли проблема. Если он прошел гладко, он отобразит эхо «y».
Как я уже говорил выше, мне нужно, чтобы он возвращал истину, когда данные равны y, но это не так. Единственный способ, которым он проверяет, - это если я сохраню предпоследнюю строку "return false;" в противном случае он отправляется за мой php-сервер. У меня нет проблем с if (! Var [0]) { } функции, так что это не проблема.
Какие-либо предложения?

Вы можете взглянуть на Плагин jQuery Validator, который дает вам множество вариантов для проверки, включая вызовы AJAX.
Это потому, что вы используете функцию проверки, как если бы это была синхронная операция. Однако метод .get является асинхронным, что означает, что функция не ожидает возврата метода xhr, вместо этого он всегда будет пропускать и возвращать false. Вы можете использовать вызов метода .ajax и пометить его как асинхронный: false, однако это плохая практика, поскольку он блокирует пользовательский интерфейс для пользователя, и если по какой-либо причине xhr не может вернуть, браузер клиента не будет работать, если вы не отмените вызов через тайм-аут xhr - но этот метод я бы не советовал.
Как никф ускользнул попробовать проверить плагин. Автор упоминает сложности синхронной проверки ajax и то, как плагин помогает вам не беспокоиться об этом.
Ajax helps to bridge the gap, but synchronizing validation on form submit isn’t exactly an easy task. The validation plugin makes it as simple as pure client-side validation. All you need to do is to specify a rule “remote” for a field and provide a parameter that points to a server-side resource that handles the validation.