2012-06-22 6 views
20

Ich habe den folgenden Code:Callback-Funktion für jQuery .html()?

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

Ajax-Anfragen empfangen ein json Objekt ein HTML-Formular dergleichen enthält:

<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> 

, die die Informationen enthält, dass PayPal erfordert, um die Reihenfolge zu verarbeiten. Alles funktioniert gut, außer ich glaube manchmal, das Formular wird eingereicht, bevor die jQuery .html-Funktion mit dem Laden des HTML-Inhalts getan wird.

Gibt es eine Callback-Funktion für .html? oder eine andere Methode, mit der ich das Problem lösen kann? Die PayPal-Daten kommen als HTML-Formular und ich kann diesen Teil nicht ändern, daher habe ich nur eine Option, die irgendwie den HTML-Inhalt lädt und das Formular abschickt!

+2

allererst die Antwort ist kein json. Es ist HTML-Antwort, bitte überprüfen Sie Ihren Code. –

+1

Die .html-Methode sollte synchron sein. Wie UmeshA darauf hingewiesen hat, ist Ihr Problem wahrscheinlich etwas anderes. – hugomg

+0

es ist json, das einzige ist, dass der html-inhalt in jsonp ['output'] als string gespeichert ist. Das Json-Objekt enthält auch einige andere Informationen. – Tohid

Antwort

41

Sie können die versuchen

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

anscheinend funktioniert es :) danke sehr viel – Tohid

+0

Sie sind willkommen :-) –

+3

jQuery [Versprechen] (http://api.jquery.com/promise/) und [Detail] (http://net.utsplus.com/tutorials/javascript-ajax/wrangle- async-tasks-with-jquery-verspricht /). –