В Rails 4.1.8Rails Ajax форма: как исправить поля, прежде чем форма отсылается
Я работаю в форме оплаты (Braintree платежей), я хочу, чтобы работать через Ajax. Я не могу использовать стандартную конфигурацию формы Braintree, потому что она не предлагает метод onSuccess и onError. Но я могу использовать специальную функцию javascript, которая смотрит на поля, разговаривает с сервером Braintree и возвращает nonce, который затем отправляется в форме. Итак ...
Я создал форму и установил remote: true. Это позволяет rails_ujs взять на себя и ajax форму на моем сервере. Но прежде чем это произойдет, я должен отправить звонок в Брейнтри и получить ответ. Функция javascript, которую они предоставляют, выполняет асинхронный вызов. Поэтому я не могу подключиться к обратному вызову Rails «ajax: before», потому что вызов javascript в Braintree возвращает значение после того, как «ajax: before» перешел к основным rails_ujs, который отправляет содержимое формы на сервер, и поэтому я получаю пустое поле на сервере.
Функция js, предоставляемая функцией Braintree, имеет нормальные обратные вызовы, поэтому я могу подключиться к обратному вызову и вызвать форму отправки. Так что я попытался закреплять в случае нажмите на кнопку отправки, отключение по умолчанию, взывая к Braintree, а затем, когда я получаю успешный ответ я называю
$('#myForm').submit()
Что же на самом деле отправить данные через, но это нормально не-xhr POST. Копая глубоко, я обнаружил, что rails_ujs не ведет себя так, как будто он подключается к событию form.submit(), но к событию click button(). Так что, захватив это событие, предотвращая поведение по умолчанию, вызывая Braintree, а затем запуская событие submit() в форме, я полностью вырезал Rails-файл ajax.
Ключевым вопросом является вопрос о том, как я могу вызвать форму ajax для Rails для удаленной отправки, не нажимая кнопку отправки внутри формы?
В качестве обходного пути я могу либо выполнить вызов $ .ajax с ручным вводом, либо поместить скрытую кнопку отправки в форму и другую видимую кнопку, которая выполняет вызов Braintree, а затем вызывает щелчок по скрытой кнопке отправки. Который, по крайней мере, получит всю форму Rails с помощью токена csrf, сделанного для меня. Но я хотел бы знать, почему я не могу назвать form.submit()