2017-01-24 6 views
2

ItemEditフォームが送信される前にStripe.jsを使用して支払い元のトークンを取得しようとしています。フォームの送信を停止してトークンを取得することはできますが、AJAXリクエストが完了した後にサブミットアクションを再度呼び出す方法を理解しようとしています。今はform.submit()を使用していますが、ページ全体をリフレッシュしたいと思って、醜いアラートを出します(離脱/滞在)。誰もがこれを行うためのよりスムーズな方法を認識していますか?javascriptのItemEditFormにセーブアクションを呼び出す

(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); 

答えて

1

リクエストを行い、ページをリフレッシュしないようにするには、フォームデータをjQuery POSTで送信することができます。

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

そして、あなたがリフレッシュしたい場合は、手動でwindow.location.reload()に成功したそうやランディングページにwindow.location.replace()またはwindow.location.hrefを使用してユーザーをリダイレクトすることができます。

ドキュメント:jQuery.post()

関連する問題