2017-01-24 3 views
2

Ich benutze Stripe.js zu versuchen und ein Token für eine Zahlungsquelle abrufen, bevor das ItemEdit-Formular gesendet wird. Ich bin in der Lage, die Formularübermittlung zu stoppen und das Token abzurufen, aber ich versuche herauszufinden, wie die Übermittlungsaktion erneut aufgerufen wird, nachdem die AJAX-Anforderung (erfolgreich) abgeschlossen wurde. Im Moment verwende ich form.submit(), aber das will die gesamte Seite aktualisieren und gibt mir eine hässliche Warnung (Verlassen/Bleiben). Kennt jemand einen reibungsloseren Weg dies zu tun?Call save Aktion auf ItemEditForm von Javascript

(function($) { 
    $.entwine('ss', function($) { 
     var form = $('#Form_ItemEditForm'); 
     var field = $('input.stripetokenfield'); 

     $(form).entwine({ 
      onsubmit: function(e) { 
       var key = getStripeFieldByData(form, 'key'); 
       var token_field = getStripeFieldByData(form, 'token'); 
       Stripe.setPublishableKey(key.val()); 
       Stripe.card.createToken(form, stripeResponseHandler); 
       e.preventDefault(); 
       return false; 
      } 
     }); 
    }); 

    function getStripeFieldByData(form, string) { 
     var field = $(form).find('[data-stripe="' + string + '"]'); 
     return field; 
    } 

    function stripeResponseHandler(status, response) { 
     var form = $('#Form_ItemEditForm'); 
     if(response.error) { 
      form.find('.payment-errors').text(response.error.message); 
     }else { 
      var token_field = getStripeFieldByData(form, 'token'); 
      token_field.val(response.id); 
      if(token_field.val()) { 
       form.get(0).submit(); 
      } 
     } 
    } 
})(jQuery); 

Antwort

1

Wenn Ihr Ziel ist, die Anforderung zu machen und vermeiden die Seite zu aktualisieren, kann dies wahrscheinlich durch Senden der Formulardaten mit einem jQuery POST durchgeführt werden.

$.post(form.attr('action'), form.serialize(), function(response){ 
    // do something here on success 
}); 

Und wenn Sie aktualisieren möchten, können Sie manuell tun so auf Erfolg mit einem window.location.reload() oder den Benutzer umleiten window.location.replace() oder window.location.href auf eine Zielseite verwenden.

Dokumentation: jQuery.post()