2012-06-22 18 views
20

I mają następujące oznaczenia:Funkcja oddzwaniania dla 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 wywołań odbiera obiekt json zawierający formularza HTML jak:

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

które zawiera informacje, które karta wymaga w celu przetworzenia zamówienia. Wszystko działa dobrze, ale wydaje mi się, że czasami formularz jest przesyłany, zanim funkcja jQuery .html zostanie wykonana przy ładowaniu treści HTML.

Czy istnieje funkcja wywołania zwrotnego dla .html? lub jakiejkolwiek innej metody, której mogę użyć do rozwiązania problemu? dane PayPal są w formie HTML i nie mogę zmienić tej części, więc mam tylko jedną opcję, która w jakiś sposób wczytuje treść HTML i przesyła formularz!

+2

przede wszystkim odpowiedzią nie jest JSON. To jest odpowiedź HTML, sprawdź swój kod. –

+1

Metoda .html powinna być synchroniczna. Jak zauważył UmeshA, twój problem jest prawdopodobnie czymś innym. – hugomg

+0

to json, jedyną rzeczą jest to, że zawartość html jest przechowywana w jsonp ['output'] jako ciąg znaków. obiekt json zawiera również inne informacje. – Tohid

Odpowiedz

41

Możesz spróbować tego

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

podobno działa :) dziękuję bardzo dużo – Tohid

+0

Zapraszamy :-) –

+3

jQuery [obietnica] (http://api.jquery.com/promise/) i [szczegóły] (http://net.tutsplus.com/tutorials/javascript-ajax/wrangle- async-tasks-with-jquery-promises /). –