2015-09-24 7 views
1

У меня есть форма, которая загружает файл через ajax (используя удаленный самоцвет), который работает нормально. Я хотел бы получить ответ от сервера как JSON и вызвать функцию javascript в браузере. Как я могу это достичь? Могу ли я изменить настройку в теге формы?ROR - Запрос JSON от контроллера

Вид:

<%= form_tag import_companies_path, remote: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<%end%> 

-регулятора:

def import 
    respond_to do |format| 
     options = { col_sep: ',', converters: :numeric, headers: true } 
     array = [] 
     CSV.foreach(params[:file].path, options) do |row| 
     array.push(row.to_hash) 
     end 
     logger.debug "Parsed CSV companies: #{array.inspect}" 
     format.html { redirect_to companies_path } 
     format.json{ 
     render json: { items: JSON.pretty_generate(array)} 
     } 
     format.js { render js: JSON.pretty_generate(array) } 
    end 
    end 

ответ

2

Это может быть сделано с помощью нескольких методов.

Один из них использовать форму, как есть, просто добавив яваскрипт функции, которая будет получать JSon данные:

<script> 
    function receiverFunction(data) { 
    console.log(data.name) 
    } 
</script> 
<%= form_tag ... %> 
    ... 
<% end %> 

В контроллере:

format.js { 
    @data = { name: 'Dora' } 
} 

В вашем import.js.erb:

receiverFunction(<%= @data.to_json.html_safe %>) 

Это будет передавать @data в json на receiverFunction на вашей странице.

+0

Удивительно это сработало! Какой другой вариант? Я хотел бы обработать ajax success/error ... – Emon

+0

@Emon другие параметры: (1) отправить ajax с помощью jquery в форме submit; (2) ответьте в формате 'json' вместо' js', но это включает в себя прослушивание событий формы ('ajax: complete'), и на самом деле это неправильное использование' remote: true'. Я бы поставил на (1) или то, что дано в моем ответе. Ответ более «Railsy», затем вариант (1). – dimakura

+0

еще одним способом является удаление даже 'receiverFunction' из представления формы и определение его в виде' js'. Но, по-моему, это слишком далеко. – dimakura

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