ストライプペイメントゲートウェイをロードしようとしています。何らかの理由で、ページは常に応答を表示する前にリフレッシュされます。私はページをリフレッシュしたくない。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
'get(0)'を削除しますが、あなたのロジックはちょっと奇妙です。何よりも、jQueryとPOJSの間を行き来するためです。 –
これはちょっと混乱します。その関数内にイベントハンドラがあり、その関数はフォームで実行される何かのように見えるので、なぜイベントハンドラがそこにあるのですか?また、jQueryの 'submit()'ではなく、ネイティブの 'submit()'を使用しています。これはいくつかの問題を引き起こす可能性があります。 – adeneo
典型的なform.submitを使用するか、AJAXを使用してください。両方を使用しないでください。 –