2012-06-22 12 views
20

I tienen el siguiente código:Función de devolución de llamada para jQuery .html()?

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

Las peticiones Ajax recibe un objeto JSON que contiene un formulario HTML como:

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

que contiene la información que PayPal requiere con el fin de procesar el pedido. Todo funciona bien, excepto que a veces creo que el formulario se envía antes de que la función jQuery .html se realice con la carga del contenido html.

¿Hay alguna función de devolución de llamada para .html? o cualquier otro método que pueda usar para resolver el problema? los datos de PayPal vienen como un formulario HTML y no puedo cambiar esa parte, así que solo tengo una opción que de alguna manera cargue el contenido html y envíe el formulario.

+2

En primer lugar la respuesta no es un JSON. Es una respuesta HTML, por favor revisa tu código. –

+1

el método .html debe ser sincrónico. Como señaló UmeshA, su problema probablemente sea otra cosa. – hugomg

+0

es json, lo único es que el contenido html se almacena en jsonp ['salida'] como una cadena. el objeto json también contiene otra información. – Tohid

Respuesta

41

Usted puede intentar este

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

aparentemente funciona :) muchas gracias mucho – Tohid

+0

Usted es bienvenido :-) –

+3

jQuery [promesa] (http://api.jquery.com/promise/) y [detalle] (http://net.tutsplus.com/tutorials/javascript-ajax/wrangle- async-tasks-with-jquery-promises /). –

Cuestiones relacionadas