使用Ajax进行语义UI自定义表单验证

时间:2015-11-25 08:19:25

标签: ajax validation semantic-ui

我正在尝试为我的用户名字段实现自定义表单验证规则,该规则应该检查数据库是否重复。

在互联网上搜索后,我写了一些代码,并成功获得了回复" true / false"从我的服务器。但是表单中的字段并没有按照它应该更新。下面是我的javascript代码。



$.fn.form.settings.rules.checkUsername = function(value) {
        var res = true;
        $.ajax({
            async : false,
            url: '<?= Yii::app()->createAbsoluteUrl('home/doCheckUsername') ?>',
            type : "POST",
            data : {
                username : value
            },
            dataType: "json",
            success: function(data) {
                if (data.result == true) {
                    console.log(data.result);
                    return false;
                } else {
                    console.log(data.result);
                    return true;
                }
            }
        });
    };

$('.ui.form').form({
    username: {
      identifier : 'username',
      rules: [{
          type   : 'checkUsername',
          prompt : 'Username Already Exists'
        }]
    }
    // some other rules
  }, {
    inline : true,
    on     : 'blur',
    onSuccess : function(){
        //post to controller
    }
  });
&#13;
&#13;
&#13;

console.log向我展示了我想要的正确结果,但我一直在&#34;用户名存在&#34;如图所示

Semantic UI form Validation result

我可以知道我在哪里做错了吗?

3 个答案:

答案 0 :(得分:1)

不知何故,在ajax上添加Async解决了这个问题。

$.ajax({
        async : false,
        url: '<?= Yii::app()->createAbsoluteUrl('home/doCheckUsername') ?>',
        type : "POST",
        async: false,
        data : {
            username : value
        },
        dataType: "json",
        success: function(data) {
            if (data.result == true) {
                console.log(data.result);
                res = false;
            }
        }
    });

答案 1 :(得分:0)

将结果放入res变量并在ajax调用后返回res变量! 为我工作:

$.fn.form.settings.rules.checkemail = function(value) {
    var res = true;
    $.ajax({
        async : false,
        url: '../php/email_exist.php',
        type : "POST",
        async: false,
        data : {
            email : value
        },
        success: function(data) {
            console.log(data);
            if (data == "0") {
                console.log("OK");
                res = true;
            } else {
                console.log("KO");

                res = false;
            }
        }
    });
return res;
};    

答案 2 :(得分:0)

$.fn.form.settings.rules.checkUsername = function(value) {
        var res = true;
        $.ajax({
            async : false,
            url: '<?= Yii::app()->createAbsoluteUrl('home/doCheckUsername') ?>',
            type : "POST",
            data : {
                username : value
            },
            dataType: "json",
            success: function(data) {
                if (data.result == true) {
                    //console.log(data.result);
                    //return false;
                    **value = 0;**
                } else {
                    //console.log(data.result);
                    //return true;
                    **value = 1;**
                }
            }
        });
         **return (value == 1 )? true : false;**
    };

$('.ui.form').form({
    username: {
      identifier : 'username',
      rules: [{
          type   : '**checkUsername[value]**',
          prompt : 'Username Already Exists'
        }]
    }
    // some other rules
  }, {
    inline : true,
    on     : 'blur',
    onSuccess : function(){
        //post to controller
    }
  });