Это мой код:
$(function() {
var name = $( "#name" ),
email = $( "#email" ),
password = $( "#password" ),
allFields = $( [] ).add( name ).add( email ).add( password ),
tips = $( ".validateTips" );
function updateTips( t ) {
tips
.text( t )
.addClass( "ui-state-highlight" );
setTimeout(function() {
tips.removeClass( "ui-state-highlight", 1500 );
}, 500 );
}
function checkLength( o, n, min, max ) {
if ( o.val().length > max || o.val().length < min ) {
o.addClass( "ui-state-error" );
updateTips( "Length of " + n + " must be between " +
min + " and " + max + "." );
return false;
} else {
return true;
}
}
function checkRegexp( o, regexp, n ) {
if ( !( regexp.test( o.val() ) ) ) {
o.addClass( "ui-state-error" );
updateTips( n );
return false;
} else {
return true;
}
}
function ajaxValidate(type,fval,n) {
//alert(type+" "+fval.val()+" "+n);
$.ajax({
type: "GET",
url: "ajaxValidate.php",
data: "type="+type+"&q="+escape(fval.val()),
success: function(msg){
if (msg != "") {
fval.addClass( "ui-state-error" );
updateTips( n );
return false;
}
else {
return true;
}
}
});
}
$( "#dialog-form" ).dialog({
autoOpen: false,
height: 540,
width: 420,
modal: true,
buttons: {
"Create an account": function() {
var bValid = true;
allFields.removeClass( "ui-state-error" );
bValid = bValid && checkLength( name, "username", 3, 16 );
bValid = bValid && checkLength( email, "email", 6, 80 );
bValid = bValid && checkLength( password, "password", 5, 16 );
bValid = bValid && ajaxValidate("user", name,"Username is taken");
bValid = bValid && ajaxValidate("email", email,"Email address is taken");
bValid = bValid && checkRegexp( name, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter." );
// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
bValid = bValid && checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. john.doe@pokermaps.org" );
bValid = bValid && checkRegexp( password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9" );
if ( bValid ) {
$( "#users tbody" ).append( "<tr>" +
"<td>" + name.val() + "</td>" +
"<td>" + email.val() + "</td>" +
"<td>" + password.val() + "</td>" +
"</tr>" );
document.forms["regform"].submit();
$( this ).dialog( "close" );
}
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
close: function() {
allFields.val( "" ).removeClass( "ui-state-error" );
}
});
$( "#create-user" )
.button()
.click(function() {
$( "#dialog-form" ).dialog( "open" );
});
});
Моя проблема связана с функцией ajaxValidate
и двумя строками в коде, который вызывает эту функцию.
По какой-то странной причине, это работает только один раз, то есть, если вы продолжаете первый вызов для проверки пользователя, он будет делать это правильно, но не будет проверять электронную почту, но если вы сначала сделаете вызов проверки электронной почты, он подтвердит это, но не подтвердит пользователя.
Остальная часть сценария проверки работает, поэтому, если я закомментирую две строки вызова, все будет отлично.
PHP-скрипт также работает.
Почему это?
UPDATE:
Хорошо, ребята, я немного изменил функцию, объединив запросы проверки, так что теперь ajaxValidate
выглядит так:
function ajaxValidate(fval1,fval2,n) {
//alert(type+" "+fval.val()+" "+n);
$.ajax({
type: "GET",
url: "ajaxValidate.php",
data: "?email="+escape(fval1.val())+"&user="+escape(fval2.val()),
success: function(msg){
alert(fval1.val());
alert(msg);
}
});
}
Вызов функции выглядит следующим образом:
bValid = bValid && ajaxValidate(email, name ,"Email/User address is taken");
И ajaxValidate.php выглядит так:
require_once('classes/db/conn.php');
$user = $_GET['user'];
$email = $_GET['email'];
$query_user = mysql_fetch_array(mysql_query("SELECT USR_ID FROM users WHERE USR_Username = '$user'"));
$query_email= mysql_fetch_array(mysql_query("SELECT USR_ID FROM users WHERE USR_Email = '$email'"));
echo("SELECT USR_ID FROM users WHERE USR_Email = " . $email);
Теперь, после отправки формы, я должен получить одно оповещение с заполненным электронным письмом и одно оповещение с содержанием ответа ajax, которым должен быть SQL-запрос с письмом из $_GET
var .
Что я получаю, так это то, что при первом оповещении я правильно получаю адрес электронной почты, а во втором оповещении я получаю весь запрос, но без адреса электронной почты. (SELECT USR_ID FROM users WHERE USR_Email =
)
Я схожу с ума, я не могу понять это!