2016-08-18 3 views
3

Я создал приложение rails, которое отправляет форму удаленно, а затем отображает ошибки проверки формы, если проверка не проходит.Настройка глобального типа данных ajax разрывает рельсы удаленных ссылок

Моя форма работает отлично. Однако я обнаружил, что способ, которым я его настраивал, разбивает любые удаленные ссылки. Причина этого в том, что я настраиваю глобальный тип данных AJAX как «json». Если я удалю этот параметр, мои удаленные ссылки работают, но тогда мои формы «успех» и «события сбоя» не запускаются.

Вот мой код ...

application.js

$.ajaxSetup({ 
    dataType: 'json' 
}) 

foo.coffee
$('#foo_form').on('ajax:success', (e, data, status, xhr) -> 
    console.log 'Great success' 
).on 'ajax:error', (e, data, status, xhr) -> 
    console.log('Great Failure') 

index.haml
= link_to "New Foo",new_foo_path, data: { remote: true} 

Резюмируя: Использование код выше позволяет мне отправлять формы удаленно, после чего либо сообщение об успехе, либо сообщение об ошибке записываются на мою консоль. Однако удаленная ссылка не работает с установкой '$ .ajaxSetup ({dataType:' json '}), определенной выше. Если я удалю этот фрагмент кода, ссылки работают, но события формы не запускаются.

Любые идеи?

ответ

2

вы пробовали:

= link_to "New Foo", new_foo_path(format: :json), data: {remote: true}

Пожалуйста, опишите, что не работает с удаленными ссылками точно? 500, 404, not preventedDefault by javascript?

2

Вам необходимо отправить форму, не иметь ссылки, указывающей на действие. Если вы хотите, чтобы ваши данные формы были представлены, используйте вспомогательные команды form_for или form_tag и .submit или submit_tag.

= form_tag (new_foo_path, remote: true) do 
    = submit_tag("New Foo") 

link_to создаст якорь тег, который не будет знать о ваших данных формы. Если вы хотите стилизовать кнопку формы в качестве ссылки:

= submit_tag("submit", style: 'display: none;', id: 'submit_foo') 
= link_to("New Foo", "#", :onClick => "$('#submit_foo').click(); return false;") 

submit ajax form with link (StackOverflow)