2012-06-22 12 views
20

Ho il codice seguente:Funzione di callback per jQuery .html()?

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

Le richieste Ajax riceve un oggetto JSON contenente un form html come:

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

che contiene le informazioni che PayPal richiede per elaborare l'ordine. Funziona tutto bene, a meno che non ritenga che a volte il modulo venga inviato prima che la funzione jQuery .html venga eseguita con il caricamento del contenuto html.

Esiste una funzione di richiamata per .html? o qualsiasi altro metodo che posso usare per risolvere il problema? i dati di PayPal arrivano sotto forma di HTML e non posso modificare quella parte, quindi ho solo un'opzione che in qualche modo carica il contenuto html e invia il modulo!

+2

Prima di tutto la risposta non è un JSON. È una risposta HTML, controlla il tuo codice. –

+1

il metodo .html dovrebbe essere sincrono. Come ha sottolineato UmeshA, il tuo problema è probabilmente qualcos'altro. – hugomg

+0

è json, l'unica cosa è che il contenuto html è memorizzato in jsonp ['output'] come stringa. l'oggetto json contiene anche altre informazioni. – Tohid

risposta

41

Si può provare questo

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

a quanto pare funziona :) grazie mille molto – Tohid

+0

Prego :-) –

+3

jQuery [promessa] (http://api.jquery.com/promise/) e [dettaglio] (http://net.tutsplus.com/tutorials/javascript-ajax/wrangle- asincroni-task-with-jquery-promesse /). –

Problemi correlati