ROR - 从Controller请求JSON

时间:2015-09-24 15:50:53

标签: ruby-on-rails json

我有一个表单,通过ajax(使用remotipart gem)上传文件,工作正常。我希望服务器的响应为JSON并在浏览器上触发javascript函数。我怎样才能做到这一点?我可以更改表单标签中的设置吗?

查看:

<%= 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

1 个答案:

答案 0 :(得分:2)

这可以使用几种技术来完成。

其中一个是按原样使用您的表单,只需添加一个将接收json数据的javascript函数:

<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