2015-02-07 6 views
0

를 전송되기 전에 내가 지불 양식 (브레인 트리 지불)에서 일하고 있어요 4.1.8레일 아약스 양식 : 양식 레일에서

필드를 해결하는 방법은, 나는 아약스를 통해 작업 할. onSuccess 및 onError 메서드를 제공하지 않기 때문에 표준 Braintree 폼 설치를 사용할 수 없습니다. 하지만 필드를보고 Braintree 서버와 대화하고 nonce를 반환하는 특별한 javascript 함수를 사용할 수 있습니다. 그러면 nonce가 양식으로 전송됩니다. 그래서 ...

나는 remote : true를 만들었습니다. 이렇게하면 rails_ujs가 양식을 내 서버로 넘겨받습니다. 그러나 그 전에 Braintree에 전화를하고 응답을해야합니다. 그들이 제공하는 javascript 함수는 비동기 호출을 수행합니다. 따라서 레일스 'ajax : before'콜백은 Braintree 자바 스크립트 호출이 'ajax : before'가 양식 내용을 서버로 보내는 기본 rails_ujs로 전달 된 후 값을 반환하기 때문에 호출 할 수 없습니다. 서버 끝의 빈 필드.

Braintree 제공 js 함수에는 정상적인 콜백이 있으므로 성공 콜백에 연결하여 양식 제출을 트리거 할 수 있습니다. 그래서 나는 성공적인 응답을받을 때 나는 실제로에서 데이터를 보낼 않는

$('#myForm').submit() 

부르지 만, 그것이 정상입니다, 브레인 트리에 부르고, 기본값을 사용하지 않도록 설정, 제출 버튼의 클릭 이벤트에 접선 시도 non-xhr POST. 깊이 파고 레일스 _ujs는 form.submit() 이벤트에 연결하는 것처럼 행동하지 않지만 제출 버튼 click() 이벤트에 대해 작동합니다. 그래서 그 이벤트를 캡쳐함으로써 기본 동작을 방지하고 Braintree를 호출 한 다음 양식에서 submit() 이벤트를 트리거하면 레일스 아약스를 완전히 제거 할 수 있습니다.

중요한 질문은 양식 안의 제출 버튼을 클릭하지 않고 원격 송신을 수행하기 위해 레일스 아약스 양식을 실행하는 방법입니다.

해결 방법으로 handcode $ .ajax 호출을 수행하거나 양식에 숨겨진 제출 단추를 넣고 Braintree 호출을 수행 한 다음 보이는 숨겨진 제출 단추를 클릭하는 다른 보이는 단추를 넣을 수 있습니다. 어느 것이 든 적어도 csrf 토큰으로 제출 된 모든 레일스 폼이 나에게 도움이 될 것입니다. 그러나 왜 내가 form.submit()을 호출 할 수 없는지 알고 싶습니다.

답변

3

리모컨을 제거하십시오. 양식을 참으로 제거하고 양식을 제출하기 위해 원시 자바 스크립트를 사용하도록 바꿉니다.

braintree.setup(
 
    braintree_token, 
 
    'dropin', { 
 
    container: 'dropin', 
 
    paymentMethodNonceReceived: function (event, nonce) { 
 
    $('.braintree-checkout').append("<input type='hidden' name='payment_method_nonce' value='"+ nonce +"'></input>"); 
 
    $.ajax({ 
 
     url: braintree_charge_path, 
 
     type: 'post', 
 
     data: $('.braintree-checkout').serialize(), 
 
     context: $('.braintree-checkout'), 
 
     beforeSend: function(evt, xhr, settings){ 
 
     // Stuff to do before braintree submits, e.g. loading screen 
 
     }, 
 
     complete: function(evt, xhr, status){ 
 
     // Stuff that has to be done regardless of success or error 
 
     }, 
 
     error: function(evt, xhr, status, error){ 
 
     // Your error messages 
 
     } 
 
    }); 
 
    } 
 
});
당신이 양식 과정에 대한 모든 권한을 얻을이 방법은

흐름