0

对于表单验证来检查电子邮件是否存在我需要自定义验证我试过钱但没有工作它总是返回电子邮件已经存在我粘贴代码请确认我错误

jQuery 代码在视图中

<script type="text/javascript">
        $(document).ready(function () {

             var response;
             //<!-- add vlidator -->
             $.validator.addMethod(
             "unique_email",function(value,element){
                $.ajax({
                url:'SignUp/emailExist',
                type: 'POST',
                data: 'email='+value,
                contentType: 'application/json; charset=utf-8',
                success:function(msg){
                    response = ( msg == 'true' ) ? true : false;
                }              
                })
                return response;
             },"email already exist"
             );
            jQuery.validator.classRuleSettings.unique_email = { unique_email: true };
            $("#register-form").validate({

                submitHandler: function (form) {
                    $('#register-form').submit();
                }
            });


        });
    </script>

jQuery 移动代码

<div data-role="fieldcontain">
                <label for="email">
                <em>* </em> Email: </label>
               <label> <input type="text" id="email" 
                    name="email" class="required email unique_email" /></label>                  
            </div>

最后是通过 ajax 使用的实际代码

[HttpPost]
        public ActionResult emailExist(string email)
        {
            //here i m checking from db that email exist or not result will return 1 
            //if an email exist and 0 if not so i m return false if i found email that is on 1
            int value = su.isEmailExist(email);
            if (value == 1)
                return Json(new { success = false});
            else
                return Json(new { success = true});
        }

提前致谢

4

1 回答 1

1

由于您的 ajax 请求是异步的,因此您的验证器将始终响应未定义(或 false)的响应,因为该函数在 ajax 请求完成之前返回。

您需要在函数返回之前使您的请求同步以设置响应。您可以通过在 ajax 请求中添加“async: false”参数来做到这一点

async: false

编辑:

您的代码还有其他问题。您需要添加一种数据类型来告诉 JSON 您期待 JSON 响应。此外,msg成功响应中的变量需要一个字符串,但这是不正确的,因为 JSON 对象的第一个属性是success:. 当您使用$.ajaxdataType 'json' 时,您现在需要将数据作为 JSON 字符串传递。我已经测试了以下 javascript 代码,它似乎可以工作:

    $(document).ready(function () {

         var response;
         //<!-- add vlidator -->
         $.validator.addMethod(
             "unique_email",function(value,element){
                $.ajax({
                url:'SignUp/emailExist',
                type: 'POST',
                data: "{ email: '" + value + "' }",
                contentType: 'application/json; charset=utf-8',
                success:function(json){
                    response = json.success;
                },
                async: false,
                dataType: 'json'          
                });
                return response;
             },"email already exist"
         );
        jQuery.validator.classRuleSettings.unique_email = { unique_email: true };
        $("#register-form").validate({

            submitHandler: function (form) {
                form.submit();
            }
        });


    });
于 2012-07-08T15:43:41.243 回答