ここでPythonとJQueryを使用します。
以前は、検証(JQueryプラグイン)呼び出しで通常を使用して送信していform.submit();
ました。submitHandler
これはBraintreeの透過的なリダイレクトURLに送信され、redirect-toはサーバー上のGETハンドラーに設定されています。確認を行ってから、ハンドラーで別のリダイレクトを行います。送信されたデータがbraintreeを通過しなかった場合(たとえば、クレジットカードが不良)、<div id="error">errormessage</div>
ハンドラーからの応答でaにhtmlを書き込み、これがユーザーのページに挿入されます。
問題は、ハンドラーにエラーがあり、500ステータスコードが生成され、すべてが地獄に落ち、ユーザーのページが望ましくない動作をする場合です。
ハンドラーからの500応答が発生した場合に、それを処理できるようにしたいと思います。
statusCode
jQueryのAJAXの属性を使ってできると思っていました。
これが私が(で)試したことですsubmitHandler
:
var data = $(form).serialize();
$.ajax({
type: 'POST',
url: braintree_url,
data: data,
statusCode: {
500: function() {
alert('broked response yo');
}
}
});
次に、ハンドラーで意図的にエラーを発生させて500を強制します。
しかし、BraintreeURLへの私のajax送信が機能していません。しかしform.submit();
、うまくいきました。
私は何が間違っているのですか?このようにAJAX経由でフォームを送信して同じ結果が得られると考えるのは間違っていますか?
FWIW、次のように、htmlフォームにいくつかの属性を提供しています。
%form#addcard{"action": braintree_url, "method": "post", "autocomplete": "off", "submittype": "secure", "next": braintree_url, "target": "hidden_iframe")}
編集:
ajaxについてもう少し読んだ後、ここでのセットアップが機能しない可能性のある理由は、同一生成元ポリシーに違反して別のドメイン(Braintree)を呼び出しているためであることに気付きました。したがって、ブラウザはそれを実行していません。
差出人:http ://api.jquery.com/jQuery.ajax/
ブラウザのセキュリティ制限により、ほとんどの「Ajax」リクエストには同一生成元ポリシーが適用されます。リクエストは、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。