jQuery函数检查是否存在电子邮件地址

时间:2010-09-22 18:47:39

标签: php jquery

我的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';
}

谢谢。

2 个答案:

答案 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();
}