Я очень плохо знаком с программированием jQuery и JavaScript. У меня есть программа ниже этого проверки, взято ли имя пользователя или нет. На данный момент Сценарий PHP всегда возвращается
if(isset($_POST["username"]) )//&& isset($_POST["checking"]))
{
$xml="<register><message>Available</message></register>";
echo $xml;
}
Работы функции входа в систему, но проверка имени пользователя не делает. Какие-либо идеи? Вот весь мой код:
$(document).ready(function() {
jQuery.validator.addMethod("checkAvailability",function(value,element){
$.post( "login.php" , {username:"test", checking:"yes"}, function(xml){
if($("message", xml).text() == "Available") return true;
else return false;
});
},"Sorry, this user name is not available");
$("#loginForm").validate({
rules: {
username: {
required: true,
minlength: 4,
checkAvailability: true
},
password:{
required: true,
minlength: 5
}
},
messages: {
username:{
required: "You need to enter a username." ,
minlength: jQuery.format("Your username should be at least {0} characters long.")
}
},
highlight: function(element, errorClass) {
$(element).fadeOut("fast",function() {
$(element).fadeIn("slow");
})
},
success: function(x){
x.text("OK!")
},
submitHandler: function(form){send()}
});
function send(){
$("#message").hide("fast");
$.post( "login.php" , {username:$("#username").val(), password:$("#password").val()}, function(xml){
$("#message").html( $("message", xml).text() );
if($("message", xml).text() == "You are successfully logged in.")
{
$("#message").css({ "color": "green" });
$("#message").fadeIn("slow", function(){location.reload(true);});
}
else
{
$("#message").css({ "color": "red" });
$("#message").fadeIn("slow");
}
});
}
$("#newUser").click(function(){
return false;
});
});
Вам необходимо использовать расширенную форму $. Post ()
, которая представляет собой $. Ajax ()
, чтобы вы могли установить async
значение false, например:
jQuery.validator.addMethod("checkAvailability",function(value,element){
$.ajax({
url: "login.php",
type: 'POST',
async: false,
data: {username:"test", checking:"yes"},
success: function(xml) {
return $("message", xml).text() == "Available";
}
});
},"Sorry, this user name is not available");
В настоящее время ваша функция success
, которая анализирует ответ, происходит после завершения проверки, потому что это асинхронная операция. Таким образом, в настоящее время он ничего не возвращает в то время, когда используется возвращаемое значение, и undefined
~ = false
, поэтому оно всегда выглядит ложным. Установив для async
значение false
, вы позволяете коду выполняться по порядку без обратного вызова, поэтому фактически используется возврат в приведенном выше примере.
Другой альтернативой, если вы можете настроить структуру возврата вашей страницы, является использование встроенной удаленной
опции подключаемого модуля проверки , которая предназначена именно для такого рода вещей :)
Все в порядке, теперь работает. Вот код:
$(document).ready(function() {
jQuery.validator.addMethod("checkAvailability",function(value,element){
var x= $.ajax({
url: "login.php",
type: 'POST',
async: false,
data: "username=" + value + "&checking=true",
}).responseText;
if($("message", x).text()=="true") return true;
else return false;
},"Sorry, this user name is not available");
$("#loginForm").validate({
rules: {
username: {
required: true,
minlength: 4,
checkAvailability: true
},
password:{
required: true,
minlength: 5
}
},
messages: {
username:{
required: "You need to enter a username." ,
minlength: jQuery.format("Your username should be at least {0} characters long.")
}
},
highlight: function(element, errorClass) {
$(element).fadeOut("fast",function() {
$(element).fadeIn("slow");
})
},
success: function(x){
x.text("OK!")
},
submitHandler: function(form){send()}
});
function send(){
$("#message").hide("fast");
$.post( "login.php" , {username:$("#username").val(), password:$("#password").val()}, function(xml){
$("#message").html( $("message", xml).text() );
if($("message", xml).text() == "You are successfully logged in.")
{
$("#message").css({ "color": "green" });
$("#message").fadeIn("slow", function(){location.reload(true);});
}
else
{
$("#message").css({ "color": "red" });
$("#message").fadeIn("slow");
}
});
}
$("#newUser").click(function(){
return false;
});
});