无法使用回调来获取来自ajax调用的响应

时间:2017-11-21 03:29:25

标签: javascript jquery ajax

我正在使用jQuery Validator插件尝试在ajax调用之后检查输入到表单中的电子邮件地址是否唯一,该调用将电子邮件传递给脚本,该脚本检查电子邮件是否已存在于数据库中。我正在使用回调函数来尝试获取ajax查询的结果,但该函数始终返回undefined。我不确定我做错了什么。这是代码:

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.");

1 个答案:

答案 0 :(得分:1)

如果您正在使用jquery验证器,那么在构建方法中验证它们,那么您的验证代码将会像,

$(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"
             }
         }
    });
})

在服务器端,您必须返回(打印)truefalse代码(如果您使用的是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
}

?>