2011-11-14 11 views
2

..フォームデータをAJAX経由でBraintree透過リダイレクトに提出するにはどうすればよいですか? Pythonと、ここでのjQueryを使用して

我々は以前に検証(jQueryプラグイン)コールのsubmitHandler通常form.submit();を使用して提出されました。これはBraintreeの透明なリダイレクトURLに送信され、リダイレクトはサーバー上のGETハンドラに設定されています。私たちは確認を行い、ハンドラで別のリダイレクトを行います。提出されたデータがbraintree(悪いクレジットカード)に合格しなかった場合は、私たちのハンドラからの応答で<div id="error">errormessage</div>にhtmlを書きます。これがユーザのページに挿入されます。

私たちのハンドラにエラーがあり、ステータスコード500が生成され、すべてが地獄になり、ユーザのページが望ましくない動作をする場合に問題があります。

ハンドラからの500応答を処理できるようにしたいと思います。

私は、jQueryのAJAXのstatusCode属性を使用してそれを実行できると考えていました。ここ

は、私が(submitHandlerで)試してみたものです:

var data = $(form).serialize(); 
$.ajax({ 
    type: 'POST', 
    url: braintree_url, 
    data: data, 
    statusCode: { 
    500: function() { 
     alert('broked response yo'); 
    } 
    } 
}); 

そして私は意図的に500

を強制するために私たちのハンドラでエラーを発生させる。しかし、私のAjaxはブレーントリーのURLに提出します動かない。しかし、form.submit();は正常に動作しました。

私は間違っていますか?このようにAJAXを介してフォームを提出しても同じ結果が得られるとは思っていませんか?次のように

FWIW、私たちは、私たちのHTMLフォームに属性の数を提供しています

%form#addcard{"action": braintree_url, "method": "post", "autocomplete": "off", "submittype": "secure", "next": braintree_url, "target": "hidden_iframe")} 

はEDIT:

私はここで考えられる理由私のセットアップがあるとAJAXに関するいくつかのより多くの読書の後に実現しました同じ起源政策に違反して別のドメイン(Braintree's)に呼び出されているため動作しません。ブラウザはそれを実行していません。

から:http://api.jquery.com/jQuery.ajax/

により、ブラウザのセキュリティ制限に、最も「アヤックス」の要求は、同一生成元ポリシーの対象となります。要求は別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。

答えて

4

[OK]を...これはアヤックスの10年古いバージョンですが、それは私のため上空で働いています:

は、通常のフォーム送信($アヤックスへの呼び出しなし)を使用しますが、非表示のiframeをターゲットあなたのページで:

<form action="<%= Braintree::TransparentRedirect.url %>" method="POST" target="braintree-result"> 
... 
</form> 

<iframe name="braintree-result" id="braintree-target" style="display:none;"></iframe> 

次にjQueryを使ってのiframeのloadイベントにフック:

$('#braintree-target').on('load', function() { 
    var data = $.parseJSON($(this).contents().text()); 
    // Handle response data here 
}); 

その後、あなたのブレインを変更JSONデータを返すためのコールバックURL。iframeでレンダリングされるので、クライアント側で処理できます。それでおしまい!このメソッドは、braintreeが現在のページと同じ起点のURLにリダイレクトすることを前提としています。そうでなければ、あなたはiframeの内容を読むことができるとは思わない。

+0

iframeを使用してセキュリティ上の問題はありますか?でも、Ajaxを使って透過的なリダイレクトを実装する必要がありますが、iframeの使用についてはほとんど心配していません。 – Raeesaa

+1

@ user2235057ブラウザは、あなたのためにそれを心配しています。 Braintreeがあなたにいくつかの悪質なコードを送って実行しようとすると、あなたのページ内の何かをすることができるので、おそらくAJAXよりも安全です。 iframeに投稿することで、iframeがあなた自身のドメイン上のURLを指していなければ、ブラウザはそのiframe内のものにアクセスすることを防ぎます。これはこの解決策が頼りにしているものです。 (Braintreeに投稿した後、指定されたリダイレクトURLにiframeをリダイレクトします。) – colllin

関連する問題