0

jqueryを使ってpostメソッドを作ろうとしています。私はそれをフォームで使用し、bootstravalidator を使用して検証しています。検証が成功すると、フォームが投稿され、php が動作します。投稿が成功した後、別のページにリダイレクトしようとしています。コードは次のとおりです。

$('#buy').click(function() {
$.post('php/text.php', $('form#order').serialize(), function () {window.location.href = "index.html";});
});

何度か試しましたが、window.location.href = "index.html";正しく取得できません。検証に誤りがあってもフォームがリダイレクトされるか、何も起こらないかのいずれかです....

'php/text.php', $('form#order').serialize()'検証が正しい場合にのみ動作するため、奇妙だと思います...

編集:

また、bootstrapvalidator を使用してフォームを検証しています。検証は完全に機能し、問題がなければ post メソッドが実行されます。

ブートストラップバリデーター:

$(document).ready(function() {
        var validator = $('#order').bootstrapValidator({
            fields: {
                email : {
                    message : "write email adress", 
                    validators : {
                        notEmpty : {
                            message : "Show Email adress"
                        },
                        stringLength : {
                            min : 6,
                            max: 35,
                        }
                    }
                },
            }
        });
      });

EDIT2:

HTML:

<form id="order">
  <input type="text" name="name"/><br>
  <input type="text" name="email"/><br>
  <textarea name="comment"></textarea><br>
  <button type="submit" name="send" id="buy">Send</button>
</form>
4

3 に答える 3

0

私はあなたが何か間違っていると思います。

「bootstrapvalidator」の意味がわかりません。ブートストラップ自体は検証を提供せず、他の方法で検証されたフォーム要素を視覚的に示すだけです。

あなたが書いたコードは「検証」を行いません。

これにより$('form#order').serialize()、フォームがシリアル化され、「成功した」フォーム要素のみが含まれます ( https://api.jquery.com/serialize/およびhttps://www.w3.org/TR/html401/interact/forms.html#hを参照)。 「成功」の定義については-17.13.2 )。他のすべてのフォーム要素は除外され、すべてのフォーム要素が「成功」しない場合は空の文字列になります。

とにかく、この文字列は (無条件に)$.post()メソッドに渡されるため、POST リクエストは常に実行されます。POST リクエストが成功した場合 (ステータス コード 2xx または 304 を意味する)、リダイレクトを含む成功ハンドラーが実行されます。

したがって、目標を達成するには、POST リクエストを送信するに、フォームの何らかの検証を行う必要があります。手動で行うか、フォーム検証用に作成された jquery または bootstrap プラグインのいずれかを使用できます。

于 2016-09-02T13:03:57.567 に答える
0

解決策を見つけました

        $(document).ready(function() {
             var validator = $('#order').bootstrapValidator({
                    fields: {
                        email : {
                            message : "write email adress", 
                            validators : {
                                notEmpty : {
                                    message : "Show Email adress"
                                },
                                stringLength : {
                                    min : 6,
                                    max: 35,
                                }
                            }
                        },
                    }
                }).bootstrapValidator('validate');
              });

        $(#button).click(function() {
             var validator = $('#order').bootstrapValidator({
                    fields: {
                        email : {
                            message : "write email adress", 
                            validators : {
                                notEmpty : {
                                    message : "Show Email adress"
                                },
                                stringLength : {
                                    min : 6,
                                    max: 35,
                                }
                            }
                        },
                    }
                }).bootstrapValidator('validate');
            var isValid = true;
            if($('#order').find('div.has-error').length > 0){
            isValid = false;
            };
            if (isValid == true){
                $.post('php/text.php', $('form#order').serialize());
                $(location).attr('href','success.html');;
            };
          });
       });
于 2016-09-06T13:30:37.200 に答える