【问题标题】:How to load payment success message without reloading page如何在不重新加载页面的情况下加载支付成功消息
【发布时间】:2016-11-05 02:39:42
【问题描述】:

我正在使用自定义条带付款表单来处理付款。付款和一切都很好,但我的问题是页面正在重新加载,然后显示成功消息。如果可能的话,我想加入某种类型的 jquery ajax,但我的方法似乎不起作用。它仍然只是重新加载。

这是我的代码的细分。所有代码都位于同一页面上,但我将在下面分解主要区域。

表格:

<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="testemail@email.com">
  </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>

</form

Javascript:

<script type="text/javascript">
            // this identifies your website in the createToken call below
            Stripe.setPublishableKey('test_key_goes_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
                    form$.get(0).submit();
                }
            }
</script>

PHP:

<?php
require 'lib/Stripe.php';

$error = '';
$success = '';

if ($_POST) {
Stripe::setApiKey("test_key_goes_here");

try {
if (empty($_POST['name']) || empty($_POST['password']) || empty($_POST['email']))
    throw new Exception("Fill out all required fields.");
  if (!isset($_POST['stripeToken']))
    throw new Exception("The Stripe Token was not generated correctly");
  Stripe_Charge::create(array("amount" => $_POST['posted'],
                              "currency" => "cad",
                              "card" => $_POST['stripeToken'],
             "description" => $_POST['email']));
  $success = '<div class="alert alert-success">
              <strong>Success!</strong> Your payment was successful.
     </div>';
}
catch (Exception $e) {
$error = '<div class="alert alert-danger">
     <strong>Error!</strong> '.$e->getMessage().'
     </div>';
}
}
?>



<div class="alert alert-danger" id="a_x200" style="display: none;"> <strong>Error!</strong> <span class="payment-errors"></span> </div>
<span class="payment-success">
<?= $success ?>
<?= $error ?>
</span>

这也是我正在尝试的 jquery ajax 请求:

更新为包含 URL

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

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

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

  });

【问题讨论】:

  • 你的网址在哪里?你的 POST 会去哪里?
  • @MisterPositive 指出,您没有 URL。 AJAX 不知道将这些信息发送到哪里。我还建议将e.preventDefault(); 移到AJAX 之前,当然我不确定这会导致任何问题。
  • 谢谢,现在已添加 URL,但仍会重新加载页面。我也收到一个警告框,但它显示所有页面代码。
  • 在您的更新中,您添加了一个 URL,但 删除了 e.preventDefault()。您需要包含它以停止表单提交时页面回发的默认行为。将它放在var url = ... 行之前。
  • 感谢更新,但不幸的是仍然重新加载页面。

标签: javascript php jquery ajax


【解决方案1】:

失败是因为您的 ajax 调用没有 url 属性。

例如:

var url = "your url here";
$.ajax({
    "dataType": "json",
    "type": "POST",
    "url": url,
    "data": params,
    "success": function (result) {
         // Your Logic HERE
    },
    "fail": function ShowFail(xhr) { alert("Sorry! Failed"); },
    "error": function (request, status, error) {
        alert('Error=' + error + ' & Status=' + status);
    }

【讨论】:

  • 虽然这可能是正确的,但我建议您改进您的答案。就目前而言,您是在指出问题,但并未完全解决/回答它。也许一个示例 sn-p 可能就足够了。
  • 点@Santi
猜你喜欢
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2012-02-23
  • 2011-11-02
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多