jQuery验证,提交处理程序和提交表单

时间:2012-09-28 00:54:21

标签: php jquery ajax jquery-validate .post

我在执行以下代码时遇到一些问题。

  1. 代码提交但它没有做任何事情,它返回到同一个屏幕,似乎表单的值没有被提交。

    <script type="text/javascript">
    $(document).ready(function(){
        $("#signin_form").validate({
              debug: false,
              rules: {
               ///
               },
               messages: {
               ///
               },
              submitHandler: function(form) { 
                  var result;
    
            $.post('test.php', $('#signin_form').serialize(),    function(data){
                result = $.parseJSON(data);
    
                if (result.flag == 'false'){
                    $('#results').show()
                }
            })
            .success(function(data){
                if (result.flag == 'true'){
                    form.submit();
                }
    
            }, 'json');
    
           }
       });
    });
    </script>
    
  2. 如果我将代码更改为以下内容,它可以工作,它会将我带到正确的屏幕,但我需要验证,验证码,我不确定它是否是正确的地方,我尝试使用beforeSubmit,但后来验证验证码。

    <script type="text/javascript">
    $(document).ready(function(){
        $("#signin_form").validate({
              debug: false,
              rules: {
               ///
               },
               messages: {
               ///
               },
              submitHandler: function(form) { 
                  form.submit();
    
    
           }
       });
    });
    </script>
    
  3. 有一些关于$ .post的东西,我不反感......并且没有提交信息。

    有谁知道它可能是什么? 谢谢!

2 个答案:

答案 0 :(得分:5)

您无需更改form提交的用于验证验证码的方式,使用remote中的jquery.validate功能。

remotejquery.validate的使用存在一些问题。检查您是否执行了以下操作:

1)请确保您仅使用 jQuery 版本 1.6.1 及以上版本。

2)使用“synchronous”选项进行远程执行(默认为异步)并执行此操作将async参数设置为false。


使用示例:

假设这是我的表格......

HTML:

idname属性添加到所有表单元素或只是验证码(这个必须同时包含)。

<form id="signin_form" action="save.php" method="POST">
  Enter captcha: O1S2C3A4R
  <br/>
  <input type="text" id="captcha" name="captcha" value=""/>
  <input type="submit" id="save" name="save" value="Save"/>
</form>

jQuery的:

添加typeasyncdata个参数。最后一个参数将captcha值传递给 check.php 文件,这就是该元素需要id属性的原因。然后,您就可以使用此选择器$('#captcha')

(对我来说这样更好但你也可以使用其他选择器类型按名称调用元素)

要知道,您还需要为remote定义错误消息,在这种情况下,我使用无效验证码

$(document).ready(function(){

    $("#signin_form").validate({
        rules: {
            captcha: {
                required: true,
                remote: { 
                    url:"check.php",
                    type:"post",
                    async:false,
                    data: {
                        /* this is the name of the post parameter that PHP will use: $_POST['captcha'] */
                        captcha: function() {
                            return $.trim($("#captcha").val());
                        }
                    }
                }
            }
        },
        messages: {
            captcha: {
                required: "*",
                remote: "Invalid captcha"
            }
        }
    });

});

PHP:check.php

此时,使用"true""false"作为 字符串 来了解jquery.validation插件非常重要验证码是否有效。在这种情况下,如果验证码等于 O1S2C3A4R ,那么它是有效的,在客户端,您将看到submit将处理form }到html save.php form属性中指定的action文件。

<?php

    $captcha = $_POST['captcha'];

    if($captcha == "O1S2C3A4R"){
        echo "true";
    } else {
        echo "false";
    }

?>

这样,您可以毫无问题地验证整个form,并远程检查验证码值,而无需更改插件功能。

此外,您可以一起测试所有这些代码,看看它是否有效: - )

希望这有帮助。

答案 1 :(得分:2)

使用Javascript:

<script type="text/javascript">
    $(document).ready(function(){
        $("#signin_form").validate({
            rules: {
                captcha: {
                    remote: {
                        url: "remote.php"
                        }
                    }
                }
            },
            messages: {
                captcha: {
                    remote: "Please enter the text in the captcha."
                }
            }
        });
    });
</script>

HTML表单:

<form id="signin_form">
    <input type="text" name="captcha">
    <input type="submit">
</form>

PHP:

$response = $_GET['captcha']; 
$answer  = 'captcha_answer';

if($response==$answer){
    echo 'true'; 
} else {
    echo 'false'; 
}

很抱歉将这部分推到答案中 - 我不允许发表评论:

请注意,将“async”参数设置为false会锁定您的页面,直到您收到响应,这可能不是您想要的。验证库应该阻止正常的表单提交,如果它正在等待远程验证的响应,至少在较新的版本中(我使用的是jQuery 1.7.2和验证1.10.0)。

IIRC jQuery Validate库会将除精确字符串“true”以外的任何内容视为错误。这可以用于根据拒绝原因传递不同的自定义消息。 json_encode添加了额外的引号,导致jQuery Validate将其视为自定义错误消息。