2016-09-02 23 views
0

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

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

私はいくつかの試みを試してみましたが、正しくwindow.location.href = "index.html";を取得することはできません。どちらの形式は

....でも、障害のある検証とリダイレクト、または何もまったく起こりません取得し、検証が正しい...

EDITある場合'php/text.php', $('form#order').serialize()'は唯一のアクションに入ったので、私は、それが奇妙見つける:

私はまた、フォームを検証するためにbootstrapvalidatorを使用しています。検証が完全に機能し、すべてがokeyならpostメソッドが実行されます。

Bootstrapvalidator:

$(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:あなたは#buyボタンをクリックし、さらにはあなたの場合は一度

<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> 
+0

は、それが成功機能限りなっている解決策を見つけましたか? –

+0

コードの実行後も、ブラウザはフォームを送信しています。 戻り値falseを追加します。それを防ぐハンドラに。 – Bhavin

+0

@Bhavinはあなたのアイデアをあまり得ていません。コードで私を見せてください。 – PLAYCUBE

答えて

0

あなたのフォームが送信されますJavaScriptコードが実行され、ページが更新されます。フォームの送信を無効にする場合は、$(form).on('submit', function() { return fase; })を使用できます。

これは、更新されたコードです:

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

更新

あなたがbootstrapvalidatorを使用するので、あなたは(プラグインは、あなたが使用する必要があるsubmitHandler機能を持っている)にも提出するプロセスのためのプラグインを使用する必要があります

これでバリデータの更新されたコード:

$(document).ready(function() { 
    var validator = $('#order').bootstrapValidator({ 
     fields: { 
      email : { 
       message : "write email adress", 
       validators : { 
        notEmpty : { 
        message : "Show Email adress" 
        }, 
        stringLength : { 
         min : 6, 
         max: 35, 
        } 
       } 
      }, 
     }, 
     submitHandler: function(validator, form, submitButton) { 
      $.post('php/text.php', 
       form.serialize(), 
       function() { 
        window.location.href = "index.html"; 
       } 
      ); 
    }); 
}); 
+0

まだ間違ったバリデーションでリダイレクトされる.... – PLAYCUBE

+0

アップデートを確認 – Dekel

+0

フォームがロードされるとすぐにバリデーションを行う方法を知っていますか?誰かが送信ボタンを押しますか?私の考えは、検証が正しければすぐに送信ボタンを有効にすることです – PLAYCUBE

0

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

「bootstrapvalidator」の意味が分かりません。ブートストラップ自体は検証を提供せず、検証されたフォーム要素の視覚的な表示のみを提供します。

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

この$('form#order').serialize()は、フォームをシリアル化し、「成功」のフォーム要素(「successfull」の定義については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プラグインのonyを使うこともできます。

+0

違う。 [bootstrapvalidator](https://github.com/nghuuphuoc/bootstrapvalidator)は、ブートストラップライブラリに依存する検証ライブラリです。 – Dekel

+0

申し訳ありませんが、私は元の投稿に "bootstrapvalidator"の仕様を追加することなく答えました。その言葉をgoogleに入れれば、ただ1つの実装/プラグイン以上のものを見つけることができます。あなたはもちろん、「#buy」は送信ボタンであり、フォームはいずれ提出されるでしょう。最初のバージョンの質問ではそれは明らかではありませんでした。 –

+0

また、使用しているブートストラップ検証ツールも知っておく必要があります。それが何をしているのかは分かりません。 –

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');; 
      }; 
      }); 
     }); 
関連する問題