【问题标题】:Use more than one remote ajax on jQuery在 jQuery 上使用多个远程 ajax
【发布时间】:2018-08-04 14:35:46
【问题描述】:

我想使用 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{}

有什么办法吗?

【问题讨论】:

  • 为什么不通过同一个端点验证两者?只是出于好奇。
  • @RomeoSierra 如果我使用相同的功能,我不知道每个人的信息是什么
  • @RomeoSierra 我学习了这篇文章,但我搜索是否有这样的方法而不定义 jQuery 函数
  • 如果你不能做2个遥控器,可以在提交前检查submitHandler的黑名单

标签: php jquery


【解决方案1】:

This answerthis question 声称 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

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

插件几乎是完全可定制的。详情请参阅documentation

编辑(更新原始问题后)

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{}

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

【讨论】:

  • 感谢您的回复,您的回答是合乎逻辑的,但是我需要在我的 php 函数中更改什么?
  • @PHPSA 为什么不使用您已经编写的 php 代码更新您的问题?那么也许我们可以提供帮助。
  • 添加了所需的 php 例程。但请记住,这是我对您的场景的看法。您可以通过许多其他方式来实现这一点。
  • 这可以完美地进行一些更改,但我可以在这里显示错误消息吗? messages:{ Email:{ remote:'email already exist' } }
  • 请参阅文档。
猜你喜欢
  • 2010-11-20
  • 2012-07-01
  • 1970-01-01
  • 2013-12-25
  • 2013-09-18
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多