zoukankan      html  css  js  c++  java
  • fastadmin nice validator remote验证 json数据 ajax 验证失效

    1、背景

    最近接触到fastadmin,在处理表单验证方面,fastadmin使用的是Nice-validator验证插件,刚开始用着还挺爽,表单的验证也挺方便,毕竟人家已经提供了很多的验证规则,但是有这么个需求,那就是修改个人信息时需要确保账号的唯一性,也就是唯一性验证,这个人前端也想到了,给了你一个remote()远程验证,这个函数还可以传参数,逗号隔开即可,看起来也挺方便,但用起来有些困难。。。。

    2、问题

    先谈需求:1、账号唯一性验证   2、其它字段的验证  3、ajax提交  

    再来看看具体遇到哪些问题:

    1、远程验证remote 这玩意官网上说  (图在下面)     返回字符串说是可以直接显示,我后端用的php,我return 字符串也不行,  它说还有统一格式 $this->success('ok'),这样说也行,那行吧,人家官网上说格式统一,那咱试试,结果不显示信息,就是不管是否唯一,后端会返回一个msg,展示到前端页面上给用户看,但是$this->success()返回的是个json(我的这个success()返回的是json),好吧,json,人家官网也有说json数据咋处理,照着官网的代码走一遍,结果。。。。。。js报错,提示说validator 不是个函数。。。。。我也是醉了,看看jq,有啊,看看jQuery.validator.js也有,顺序也没错。。。。有点让人无语    然后想着用input的失去焦点blur函数来触发这个 验证  于是我就将 $('#form').validator()函数 写在了 blur函数里面,然后   还真别说,真的能用,,,,,

    2、remote 能用了,也能显示msg信息了(如何显示msg信息?获取到了data中的msg然后用js添加到页面即可!有没有自动,fastadmin给我们准备好了的那种?不好意思,母鸡啊),但是其他字段的验证规则有失效了。。。。。然后没办法,在看看官方文档吧,就看到验证规则有两种绑定方式,一种是dom,一种是js,我好像两种都用了,那可以理解为啥其它字段的验证规则不能用了,冲突了,只能二选一,可是dom已经绑定了,不想再用js绑定了,这简单啊,把那个validator删掉,直接用jq,当input失去焦点时发起个ajax请求就完事了

    3、ajax提交,发现验证成不成功都能发起ajax,毕竟ajax那玩意儿只要单击了就给你发起ajax了,而且ajax提交会导致验证只生效一次,第二次没反应。。。。

     js加载图片:

     3、解决办法

    先贴出html

    <form id="changepwd-form" class="form-horizontal" role="form" data-toggle="validator"
                                      autocomplete="off">
    
                                    <div class="form-group">
                                        <label for="username" class="control-label col-xs-12 col-sm-2">名称:</label>
                                        <div class="col-xs-12 col-sm-4">
                                            <input type="text"
                                                   data-rule="required;"
                                                   id="username" name="username"
                                                   class="layui-input form-control input-none" placeholder="姓名"
                                                   value="{$username}">
                                            <div id="username_msg" style="color: red"></div>
                                        </div></div>
    
                                    <div class="form-group">
                                        <label for="mobile" class="control-label col-xs-12 col-sm-2">联系手机号:</label>
                                        <div class="col-xs-12 col-sm-4">
                                            <input type="text" data-rule="required;mobile" id="mobile" name="mobile"
                                                   class="layui-input form-control input-none" placeholder="手机号"
                                                   value="{$mobile}">
                                        </div>
                                    </div>
                        <div class="form-group normal-footer">
                                        <label class="control-label col-xs-12 col-sm-2"></label>
                                        <div class="col-xs-12 col-sm-8 apply-submit">
                                            <button type="button" id="editBtn" class="check-btn">确定修改</button>
                                        </div>
                                    </div>
      </form>

    js:

    <script>
        var flag = true;
        $(function () {
            /*检查名称是否唯一*/
            $('#username').blur(function () {
                /*动态获取用户名*/
                var username = $('#username').val();
                /*构造参数*/
                var params = {
                    id: {$info.seller_id},
                    username: username
                };
                $.ajax({
                    type: "GET",
                    url: "{:url('xxxxxxxxxxxx')}",
                    data: params,
                    dataType: "json",
                    success: function (data) {
                        console.log(data)
                        /*显示提示信息*/
                        $('#username_msg').text(data.msg)
                        /*为0  即验证失败  为1即验证通过*/
                        if (data.code == 1) {
                            /*让flag为true*/
                            flag = true
                        } else {
                            /*验证未通过 false*/
                            flag = false
                        }
                    },
                    error: function (jqXHR) {
                        console.log("Error: " + jqXHR.status);
                    }
                });
            })
    
    
            $('#editBtn').click(function () {
                /*用  isValid 函数 判断是否通过了验证*/
                $("#changepwd-form").isValid(function (pass) {
                    if (pass) {
                        alert("通过!")
                        if (flag) {
                            console.log(33)
                            return false
                            var params = $('#changepwd-form').serializeArray();
                            //加载层
                            var index = layer.load(0, {shade: false});
                            console.log(params)
                            $.ajax({
                                type: "POST",
                                url: "{:url('xxxxxxxxxx')}",
                                data: params,
                                dataType: "json",
                                success: function (data) {
                                    layer.close(index);
                                    if (data.code == 200) {
                                        layer.msg(data.msg, {
                                            time: 1000 //1秒关闭(如果不配置,默认是3秒)
                                        }, function () {
                                            location.reload()
                                        });
                                    }
                                    console.log(data)
                                },
                                error: function (jqXHR) {
                                    console.log("Error: " + jqXHR.status);
                                }
                            });
                        } else {/*验证未通过*/
                            layer.msg('请检查名称是否唯一');
                        }
                    }
                })
            })
            
        })
    
    </script>

    php:

    返回的是json数据

    最重要的是isValid()这个函数

  • 相关阅读:
    nanoPI kernel compile record
    Golang go get第三方库的坑
    Python解析Linux命令行
    Linux:dd命令
    Golang异常处理
    Golang自定义包导入
    Golang覆盖写入文件的小坑
    Golang数据类型总结及其转换
    ASP.NET学习之页面传值(8)_Application传值
    ASP.NET学习之页面传值(7)_Cookie传值
  • 原文地址:https://www.cnblogs.com/zqblog1314/p/14081664.html
Copyright © 2011-2022 走看看