0

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

  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>
    

有一些关于 $.post 我不理解的东西......并且不提交信息。

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

4

2 回答 2

5

您不需要更改form提交方式,在这种情况下,为了验证验证码,请remote使用jquery.validate.

remote使用jquery.validate. _ 检查您是否执行了以下操作:

1)确保您只使用jQuery 1.6.1及更高版本。

2)使用“同步”选项进行远程执行(默认为异步)并将此设置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:

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

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

要知道,您还需要为 定义错误消息remote,在这种情况下,我使用了Invalid captcha

$(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:检查.php

此时,重要的是使用"true""false"作为字符串来让jquery.validation插件知道验证码是否有效。在这种情况下,如果验证码等于O1S2C3A4R则有效,并且在客户端,您会看到submit将处理html属性中指定的formto文件。save.phpform action

<?php

    $captcha = $_POST['captcha'];

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

?>

这样做,您可以form毫无问题地验证整体,还可以在不更改插件功能的情况下远程检查验证码值。

您也可以一起测试所有这些代码并查看它是否有效:-)

希望这可以帮助。

于 2012-09-28T01:29:21.377 回答
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 和 Validation 1.10.0)。

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

于 2012-09-28T03:43:25.493 回答