2016-11-04 16 views
-2

ストライプペイメントゲートウェイをロードしようとしています。何らかの理由で、ページは常に応答を表示する前にリフレッシュされます。私はページをリフレッシュしたくない。jQuery Ajaxが同じページにロードされていません

これは、私が働いている 'jsの'( 'jQueryの' はミックスとバニラJS)

<script type="text/javascript"> 
      // this identifies your website in the createToken call below 
      Stripe.setPublishableKey('stripe_key_here'); 

      function stripeResponseHandler(status, response) { 
       if (response.error) { 
        // re-enable the submit button 
        $('.submit-button').removeAttr("disabled"); 
        // show hidden div 
        document.getElementById('a_x200').style.display = 'block'; 
        // show the errors on the form 
        $(".payment-errors").html(response.error.message); 
       } else { 
        var form$ = $("#payment-form"); 
        // token contains id, last4, and card type 
        var token = response['id']; 
        var posted = document.getElementById("post-price").value 
        // insert the token into the form so it gets submitted to the server 
        form$.append("<input type='hidden' name='stripeToken' value='" + token + "' />"); 
        form$.append("<input type='hidden' name='posted' value='" + posted + "' />"); 
        // and submit  

        $("#payment-form").get(0).submit(function(e) { 

         e.preventDefault(); 
         var url = "pricing.php"; 

         $.ajax({ 
           type: "POST", 
           url: url, 
           data: $("#payment-form").serialize(), 
           success: function(data) 
           { 
            alert(data); 
           } 
          }); 

        }); 

       } 
      } 
</script> 

がここにも、フォームのコードを手に入れている:

<form action="" method="POST" id="payment-form" class="form-horizontal"> 


    <div class="username-info"> 
    <input type="text" name="name" maxlength="70" placeholder="Your full name" class="name form-control" value="Test Name"> 
    </div> 

    <div class="email-info"> 
    <input type="text" name="email" maxlength="65" placeholder="Email address" class="email form-control" value="[email protected]"> 
    </div> 

    <div class="password-info"> 
    <input type="password" name="password" maxlength="70" placeholder="Password (min 6 characters)" class="password form-control" value="password123"> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>Card Number</span> 
     <input type="text" size="20" data-stripe="number"> 
    </label> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>Expiration (MM/YY)</span> 
     <input type="text" size="2" data-stripe="exp_month"> 
    </label> 
    <span>/</span> 
    <input type="text" size="2" data-stripe="exp_year"> 
    </div> 

    <div class="form-row"> 
    <label> 
     <span>CVC</span> 
     <input type="text" size="4" data-stripe="cvc"> 
    </label> 
    </div> 


    <button class="btn btn-success pricing-display-pay" id="post-price" value="300" type="submit">Pay $</button> 

</form 
+0

'get(0)'を削除しますが、あなたのロジックはちょっと奇妙です。何よりも、jQueryとPOJSの間を行き来するためです。 –

+0

これはちょっと混乱します。その関数内にイベントハンドラがあり、その関数はフォームで実行される何かのように見えるので、なぜイベントハンドラがそこにあるのですか?また、jQueryの 'submit()'ではなく、ネイティブの 'submit()'を使用しています。これはいくつかの問題を引き起こす可能性があります。 – adeneo

+0

典型的なform.submitを使用するか、AJAXを使用してください。両方を使用しないでください。 –

答えて

-2

をした場合あなたのフォームは<input type="submit"/>ボタンで送信されますが、デフォルト動作を過負荷にするにはjavascriptの最後にfalseを返す必要があります。

+0

あなたは、フォームを実際に提出したい場合は、単に 'button'を使って' click'イベントを設定してください。 –

+0

このコードでは、フォームのhtml構造を知ることができませんし、 私はこれについて話しています。 –

+0

問題はありません。AJAXにデータ送信を制御させたい場合(OPがそれを望んでいることがわかっている場合)、フォームを送信したくありません。これはAJAX呼び出しでは起こりません - それはform.submitで起こります –

0

私はリフレッシュ機能なしで同様のアップデートを書いています。

$("#payment-form").get(0).submit(function(e) { 

試してみてください:

$('#payment-form').on('submit', function (e) { 

私の関連するHTMLは次のとおりです。フォームで

<input type="submit" value="submit" name="submit"/> 

鉱山とあなたを比較すると、私が代わりに示唆しています。

+0

常にキャンセルされるサブミットイベントを呼び出すサブミットボタンがあるのは直感的です。これにより、より多くのコードを記述しなければならず、エラーの可能性が増します(この例のように)。この問題を解決する正しい方法については、OPへの私のコメントを参照してください。 –

関連する問題