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:

すべてのフォーム要素またはキャプチャのみに属性を追加idします(これには両方が必要です)。name

<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:

typeasyncおよびdata引数を追加します。この最後の引数は、captcha値をcheck.phpファイルに渡します。そのため、その要素にはid属性が必要です。その後、このセレクターを使用できます$('#captcha')

(私にとってはこれが優れていますが、他のセレクタータイプを使用して名前で要素を呼び出すこともできます)

知っておくと、のエラーメッセージも定義する必要があります。remoteこの場合、Invalidcaptchaを使用しました。

$(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"として使用することが重要です。この場合、captchaがO1S2C3A4Rと等しい場合は有効であり、クライアント側では、がhtml属性で指定されたtoファイルを処理することがわかります。jquery.validationsubmitformsave.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に設定すると、応答が返されるまでページがロックされることに注意してください。これは、希望どおりでない場合があります。検証ライブラリは、少なくとも新しいバージョンでは、リモート検証の応答を待機している場合、通常のフォーム送信をブロックする必要があります(jQuery1.7.2とValidation1.10.0を使用しています)。

IIRC jQuery Validateライブラリは、正確な文字列「true」以外のものをエラーとして扱います。これは、拒否の理由に応じて、さまざまなカスタムメッセージを渡すために使用できます。json_encodeは、jQueryValidateがカスタムエラーメッセージとして表示するようにする引用符を追加します。

于 2012-09-28T03:43:25.493 に答える