2014-01-08 3 views
1

У меня есть форма, которая отображается через ajax. Форма также отправляется с ajax. Когда форма отправляется, она дважды отправляет запрос.Rails Форма Ajax отправляется дважды

Когда кто-то нажимает на ссылку «создать профиль», форма отображается через ajax рядом со ссылкой. Когда форма отображается, мне нужно включить некоторый javascript в начале файла представления, потому что форма требует этих js-файлов. Вот форма:

<%= javascript_include_tag "/assets/temp_js/jquery-1.8.3.min.js" %> 
<%= javascript_include_tag "/assets/jquery_ujs.js" %> 
<%= javascript_include_tag "/assets/temp_js/jquery.jscrollpane.min.js" %> 
<%= javascript_include_tag "/assets/temp_js/jquery.c2selectbox.js" %> 
<%= javascript_include_tag "/assets/temp_js/jquery.colorbox-min.js" %> 
<%= javascript_include_tag "/assets/temp_js/functions.js" %> 

<%= form_for @profile, :html => { :class => "clearfix" }, remote: true do |f| %> 
    <%= f.text_area :description, :title => "Describe yourself and what you do." %> 
    <%= f.file_field :pic, :class => "field file-field", :id => "file" %> 
<%= f.submit "SAVE" %> 

Файлы были уже загружены на странице в файле application.html.erb, но они должны быть загружены снова, когда форма отображается, так как элементы в виде требует JavaScript. Единственная проблема заключается в том, что два верхних файла javascript по какой-то причине заставляют форму публиковать дважды. Я не могу избавиться от них, потому что форма нуждается в них, но форма отправляется дважды с ними. Кто-нибудь знает, как это исправить?

Я видел несколько страниц переполнения стека, в которых говорится, что я должен удалить файлы js в папке с моими ресурсами, но мне нужны они для формы. Я также прочитал, что добавление «config.serve_static_assets = false» в development.rb устранит проблему, но это не так.

Заранее спасибо.

UPDATE:

Проблема, безусловно, должен делать с файлом jquery_ujs.js. Если я удалю это из приведенного выше кода формы, он не будет выполняться дважды.

+0

вы можете попробовать без отправки файла? в вашем html отсутствует многоформатная? насколько я знаю, вам нужно передать файлы. – devanand

+0

Спасибо, пробовал, но это не исправляет. Кроме того, когда я тестирую его и просматриваю форму, я не представляю картинку. – Philip7899

+0

у вас есть какие-либо другие привязки к форме submit? используйте консоль браузера. – devanand

ответ

0

Если вы используете конвейер активов, вы, вероятно, включите application.js, который уже включает в себя все скрипты, необходимые для выполнения удаленных форм.

Вы включаете вторую копию с явным <%= javascript_include_tag "/assets/jquery_ujs.js" %>, поэтому все обработчики событий связаны дважды.

0

Я понял, что это хакерский способ сделать это, но я не уверен, опасно это или нет. По сути, я сделал копию файла jquery_ujs с обеспокоенным разделом. Главная страница по-прежнему вызывает исходный файл jquery_ujs, но когда форма отображается с помощью ajax, вместо нее вызывается копия. Если вы посмотрите на исходный код query_ujs, я закомментировал все под строкой:

// Submits "remote" forms and links with ajax 

Это опасно? Я рубин на рельсе, поэтому я второй догадываюсь о вещах, связанных с javascript и конвейером активов. Я не считаю, что это лучший ответ, поэтому еще один ответ будет по-прежнему отмечен как правильный.

1

Если у кого-то возникают проблемы с этим взглядом на ваш файл макета. Если у него есть более одного экземпляра тега <%= javascript_include_tag "application" %> , вы получите двойное действие отправки.

Смежные вопросы