我的jQuery体验非常有限,我想知道你是否可以帮助我使用AJAX请求检查是否存在电子邮件地址的函数。
到目前为止,我已经有了这段电子邮件检查代码:
$('input#email').bind('blur', function () {
$.ajax({
url: 'ajax/email.php',
type: 'GET',
data: 'email=' + $('input#email').val(),
cache: false,
success: function (html) {
if (html == 1) alert('Email exists!');
}
});
});
如何从中创建一个函数并像这样使用它:
if (!email_exists($('input#email').val())) {
$('#error_email').text('Email exists').show();
return false;
}
我的PHP代码如下所示:
$email = ($_GET['email']) ? $_GET['email'] : $_POST['email'];
$query = "SELECT `id` FROM `users` \n"."WHERE `users`.`email` = '".mysql_real_escape_string($email)."'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
echo '1';
} else {
echo '0';
}
谢谢。
答案 0 :(得分:2)
如果你真的必须同步从函数返回一个答案,你可以使用同步XMLHttpRequest而不是普通的异步(AJAX中的'A'):
function email_exists(email) {
var result= null;
$.ajax({
url: 'ajax/email.php',
data: {email: email},
cache: false,
async: false, // boo!
success: function(data) {
result= data;
}
});
return result=='1';
}
然而,强烈反对,因为它会使浏览器在等待答案时挂断,这对用户不友好。
(nb:同样,将对象传递给data
让jQuery为您处理格式化。否则,您需要明确地执行'email='+encodeURIComponent(email)
。)
您不能拥有从异步操作同步返回值的函数,反之亦然(您需要线程或协同例程来执行此操作,而JavaScript则不需要)。相反,采用异步编程并将结果返回到传入的回调:
$('#email').bind('change', function() {
check_email($('#email').val(), function(exists) {
if (exists)
$('#error_email').text('Email exists').show();
});
});
function check_email(email, callback) {
$.ajax({
url: 'ajax/email.php',
data: {email: email},
cache: false,
success: function(data) {
callback(data=='1');
}
});
}
答案 1 :(得分:1)
通过将其附加到输入的模糊事件,您已经将其设为“功能”。我只是
success: function(html) {
if (html == 1)
$('#error_email').text('Email exists').show();
else
$('#error_email').hide();
}