首页 > 解决方案 > 在 jQuery 上使用多个远程 ajax

问题描述

我想使用 jQuery 对电子邮件进行验证

使用 Ajax 进行常规验证(必需)和其他验证

第一个验证电子邮件是否存在以及其他要验证的功能不在黑名单中(其他表)

$('#form').validate({
  errorElement: 'span',
  rules:{                
     Email: {
        required: true,
        email: true,
        remote: '/ifexist'
       }
     },
     messages:{
        Email:{
            remote:'email already exist'
          }
        }
   }); 

我尝试像这样添加其他遥控器,但它不起作用

remote: '/ifexist'
remote: '/inblacklist'

我的php代码

if(isset($_GET['Email'])){
   $is_valid = Member::inblacklist($email);
   header('Content-Type: application/json');
   echo json_encode($is_valid);
 }else{}

有什么解决办法吗?

标签: phpjquery

解决方案


这个问题 答案声称jQuery 验证插件不支持多个遥控器(我还没有看到任何可靠的证据来证明这一说法或其他方面。如果我要处理你的案子,我会做如下的事情。

$('#form').validate({
    errorElement: 'span',
    rules:{                
        Email: {
            required: true,
            email: true,
            remote: {
                url:'/ifexist',
                type:'POST', //Or whatever
                data:function(){
                    return $("#email").val(); // The value of the email field
                },
                dataType:"JSON", // So that you can return a JSON object from the backend
                dataFilter:function(responseData){ // Handles the response
                    /* Assume you return a JSON object as follows
                     * {"isValid":false, "reason":"blacklisted"}
                     * or may be
                     * {"isValid":false, "reason":"duplicate"}
                     */
                    alert(responseData.reason); // Or whatever
                    return responseData.isValid; // validation result
                }
            }
        }
    },
    // Rest of the validation logic

这里发生的情况是,您可以控制来自后端验证例程的响应并根据需要处理它。

该插件几乎是完全可定制的。有关更多详细信息,请参阅文档

编辑(更新原始问题后)

php 中的后端可能如下所示。

if(isset($_POST['Email'])){
    $email = $_POST['Email'];
    $response = null;
    $isInBlackList = Member::inblacklist($email);
    if($isBlackList){
        // User is in the blacklist
        $response = array("isValid"=>false, "message"=>"This email is blacklisted!"); // Initialize $response
    }
    else{
        $alreadyExists = Member::alreadyExists($email); // You have to implement this.
        if($alreadyExists){
            // Email already exists
            $response = array("isValid"=>false, "message"=>"This email is already in user"); // Initialize $response
        }
        else{
            // We found a valid email
            $response = array("isValid"=>true);
        }
    }
    header('Content-Type: application/json');
    echo json_encode($response);
}else{}

请注意使用 phparray()封装响应并将其返回为 JSON。


推荐阅读