Javascript 无法使用回调从ajax调用获取响应
我正在使用jqueryvalidator插件来检查在ajax调用之后,表单中输入的电子邮件地址是否唯一,ajax调用会将电子邮件传递给脚本,脚本会检查电子邮件是否已经存在于数据库中。我使用回调函数尝试获取ajax查询的结果,但该函数总是返回未定义的结果。我不确定我做错了什么。代码如下:Javascript 无法使用回调从ajax调用获取响应,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用jqueryvalidator插件来检查在ajax调用之后,表单中输入的电子邮件地址是否唯一,ajax调用会将电子邮件传递给脚本,脚本会检查电子邮件是否已经存在于数据库中。我使用回调函数尝试获取ajax查询的结果,但该函数总是返回未定义的结果。我不确定我做错了什么。代码如下: jQuery.validator.addMethod("unique", function () { function foo(callback) { $.ajax({
jQuery.validator.addMethod("unique", function () {
function foo(callback) {
$.ajax({
type: 'POST',
async: true,
url: '/form_processor',
data: 'action=email_validate&email=' + $("#email").val(),
success: callback
});
}
var return_value = foo(function (result) {
if (result !== 'g') {
return false;
} else {
return true;
}
});
alert(return_value);
}, "Email address taken. Choose another.");
如果您使用的是jquery validator,那么内置方法就是他们要验证的方法,所以您的验证代码如下:
$(document).ready(function(){
$( "#myform" ).validate({
rules: {
email: {
required: true,
email: true,
remote: {
url: "form_processor",
type: "post",
data: {
email: function() {
return $( "#email" ).val();
}
}
}
}
},
messages:
{
email:
{
required: "Please enter your email address.",
remote: "Email already taken"
}
}
});
})
在服务器端,您必须返回(打印)true
或false
代码(如果您使用的是php)
可能重复我正在使用该答案中建议的回调函数来避免问题,但我仍然存在问题。我认为问题在于在调用回调函数之前您是否发出警报?是的,但您仍然试图从回调函数返回一个值,但该函数不起作用(如该问题中所述)。警报
需要在回调函数中,因为在接收到结果
时会调用该函数。请使用插件中内置的远程
方法。见文件
<?php
$email = $_POST['email'];
$query = "SELECT ID FROM users WHERE user_email = "$email" LIMIT 1;";
$results = $mysqli->query($query);
if($results->num_rows == 0)
{
echo "true"; //good to register
}
else
{
echo "false"; //already registered
}
}
else
{
echo "false"; //invalid post var
}
?>