1

我正在使用 PayPal Pay Now 按钮让用户为产品付款。单击该按钮时,我还想向我的服务器发送一些数据。因此,我通过 jQuery Ajax 将这些值发送到我的服务器。不幸的是,这有时会起作用,有时页面转到 PayPal 的速度太快,无法发送表单值,而且它们永远不会被保存。

jQuery 代码看起来像这样

//...
function sendUserDetailsByAjax(orderId){

var name = $("#name").val();
var email = $("#email").val();
var arrivalTime = $("#arrivalTime").val();

$.ajax({
    type: "POST",
    url: "/order/updateuser",
    data: { 'orderId': orderId, 'name': name, 'email': email, 'arrivalTime': arrivalTime   },
    success: function(data){
    }
}); 
$('#payWithPaypal').submit();   
}
//...

这些是表单域:

<input id="arrivalTime" type="text" size="12" class="checkoutInput"/>
<input id="name" type="text" size="32" class="checkoutInput"/>
<input id="phone" type="text" size="32" class="checkoutInput"/>

这是 PayPal 表单(${something} 元素是应用程序的变量:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" id="payWithPaypal">
  <input type="hidden" name="cmd" value="_xclick" />
  <input type="hidden" name="business" value="${place.payPalEmail}" />
  <input type="hidden" name="item_name" value="My Order" />
  <input type="hidden" name="amount" value="${order.total}" />
  <input type="hidden" name="currency_code" value="AUD" />
  <input type="hidden" name="lc" value="AU" />
  <input type="hidden" name="button_subtype" value="products" />
  <input type="hidden" name="return" value="http://mysite.com/${order.id}"/>
  <input type="hidden" name="cancel_return" value="http:/mysite.com/cancel/${order.id}" />
  <input type="hidden" name="notify_url" value="http://mysite.com?oid=${order.id}" />
  <input type="hidden" name="oid" value="${order.id}" />
  <input type="image" onclick="javascript:sendUserDetailsByAjax('${order.id}');" src="https://www.paypal.com/en_US/i/btn/x-click-but5.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" />
</form>

您对我如何确保arrivalTime,nameemail在按钮将页面重定向到 PayPal 之前发送有任何想法吗?

4

2 回答 2

2

您可以移动 PayPal 提交操作以在您的第一个表单提交成功完成时执行。因此,您可以触发 sendUserDetailsByAjax 函数以使 paypal 提交在第一个表单提交之后发生,这样两者都会一个接一个地成功发生。

function sendUserDetailsByAjax(orderId){

    var name = $("#name").val();
    var email = $("#email").val();
    var arrivalTime = $("#arrivalTime").val();

    $.ajax({
        type: "POST",
        url: "/order/updateuser",
        data: { 'orderId': orderId, 'name': name, 'email': email, 'arrivalTime': arrivalTime   },
        success: function(data){
              $('#payWithPaypal').submit();
        }
    }); 

}
于 2012-07-20T08:48:03.537 回答
0

("form").serialize是一种以您页面中包含的任何形式向您的服务器发送信息的方法。

您可以获得有关该主题的大量教程。

于 2013-03-11T06:57:52.190 回答