를 전송되기 전에 내가 지불 양식 (브레인 트리 지불)에서 일하고 있어요 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()을 호출 할 수 없는지 알고 싶습니다.