2012-06-22 14 views
20

Iは、以下のコードを有する:PayPalが注文を処理するために必要な情報が含まれていjQuery .html()のコールバック関数?

<form id="payment" method="post" action="https://www.paypal.com/cgi-bin/webscr"> 
<input type="hidden" value="_cart" name="cmd"> 
<input type="hidden" value="1" name="upload"> 
<input type="hidden" value="[email protected]" name="business"> 
<input type="hidden" value="Sample Item Name" name="item_name_1"> 
<input type="hidden" value="TESTI-1" name="item_number_1"> 
<input type="hidden" value="104.98" name="amount_1"> 
<input type="hidden" value="1" name="quantity_1"> 
<input type="hidden" value="0" name="weight_1"> 
<input type="hidden" value="Type" name="on0_1"> 
<input type="hidden" value="As Shown" name="os0_1"> 
<input type="hidden" value="Delivery Date" name="on1_1"> 
<input type="hidden" value="Jun 23,2012" name="os1_1"> 
<input type="hidden" value="Comments" name="on3_1"> 
<input type="hidden" value="test message" name="os3_1"> 
</form> 

$.ajax({ 
     type: 'GET', 
     url: 'index.php?route=checkout/onepagecheckout/getpaypaldata', 
     dataType: 'json', 
     success: function(json) { 
           $('#pp_info').html(json['output']); 
           $('#payment').submit(); 
           } 
     }); 

AJAXリクエストのようなHTMLフォームを含むJSONオブジェクトを受信します。 jQueryの.html関数がHTMLコンテンツを読み込む前にフォームが送信されることが時々あると信じている以外はすべて正常に動作します。

.htmlのコールバック関数はありますか?または私が問題を解決するために使用できる他の方法? PayPalのデータはHTML形式で提供されており、私はその部分を変更することができませんので、何とかHTMLコンテンツを読み込んでフォームを送信するオプションが1つしかありません!

+2

をしようとします。それはHTMLの応答です、コードを確認してください。 –

+1

.htmlメソッドは同期している必要があります。 UmeshAが指摘したように、あなたの問題はおそらく他のものです。 – hugomg

+0

jsonですが、唯一のことはhtmlコンテンツがjsonp ['output']に文字列として格納されていることだけです。 jsonオブジェクトには他の情報も含まれています。 – Tohid

答えて

41

あなたは、すべての応答の最初にはJSONではありません。この

success: function(json) { 
    $('#pp_info').html(json['output']).promise().done(function(){ 
     $('#payment').submit(); 
    }); 
} 
+0

明らかにそれは動作します:)とてもありがとうございます。多く – Tohid

+0

あなたは歓迎です:-) –

+3

jQuery [約束](http://api.jquery.com/promise/)と[詳細](http://net.tutsplus.com/tutorials/javascript-ajax/wrangle- async-tasks-with-jquery-promises /)。 –