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>

ボタンがページを PayPal にリダイレクトする前に を確認し、送信するarrivalTime方法について何かアイデアはありますか?nameemail

4

2 に答える 2

2

最初のフォーム送信が正常に完了したときに実行されるように、PayPal 送信アクションを移動できます。そのため、 sendUserDetailsByAjax 関数をトリガーして、最初のフォーム送信後にペイパルの送信を発生させ、両方が次々に正常に行われるようにすることができます。

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 に答える