首页 > 解决方案 > 我的 Ajax 调用返回 js.erb 文件作为浏览器中的响应。如何让它返回 json 内容,同时执行 js.erb 文件?

问题描述

我是 Ruby on Rails 的新手,正在尝试一个应用程序。我的应用程序正确执行 Ajax 调用,但响应在浏览器中显示为 js.erb 文件。如何在执行 js.erb 文件时显示 json 响应?有可能还是有更好的方法?

谢谢你。

我的控制器文件

def new
  @department = Department.new
  # respond_to do |format|
  #   format.html
  #   format.json {render json: @department}
  # end
end

def create
  @departments = Department.all
  @department = Department.create(department_params)
  respond_to do |format|
    format.html
    format.js {render json: @department}
  end
end

控制器

我的表格部分

<div class="modal-dialog">
  <div class="modal-content">
  <%= form_for @department, remote: true, data: {type: :json} do |f| %>
  <div class="modal-body">
    <h2> Department: </h2>
    <ul class="errors"></ul>

    <div class="form-group">
      <%= f.label :title, class:"control-label" %>
      <%= f.text_field :title, class: "form-control" %>
    </div>
    <div class="form-group">
      <%= f.label :body, class: "control-label" %>
      <%= f.text_field :body, class: "form-control" %>
    </div>
  </div>
  <div class="modal-footer">
    <%= f.submit class: "btn btn-primary .departmentCreate" %>
    <%= link_to "Cancel", "#", class: "btn", data: {dismiss: "modal"} %>
  </div>
<% end %>
</div>
</div>

表单.html.erb

如果我保留 format.js {render json: @department} Json 响应,我的 Json 响应

如果我从控制器中删除渲染 json,我的响应: JS 响应

我的 new.js.erb 文件

$("#department-modal").html("<%= escape_javascript(render 'departments/new') %>")
$("#department-modal").modal("show")

我的 _new.html.erb 部分:

<%= render "form" %>

我的 create.js.erb 文件:

<%= render 'save' %>

我的 _save.js.erb 部分:

$("ul.errors").html("")
<% if @department.errors.any? %>
  <% @department.errors.full_messages.each do |message| %>
    $("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
<% end %>
<% else %>
  $(".department-index").html("<%= escape_javascript(render 'departments/index') %>")
  $("#department-modal").modal("hide")

在浏览器中呈现 json 响应时,js.erb 文件不会执行。如何在 js.erb 文件执行时在浏览器中显示 json 响应?谢谢 :)

标签: ruby-on-railsjsonrubyajaxresponse

解决方案


如何在 js.erb 文件执行时在浏览器中显示 json 响应?谢谢 :)

如果我正确理解了您的要求,那么答案是您不能。您的回复Content-Type将是 anapplication/json或 an application/javascript

浏览器将使用此标头来处理响应。


推荐阅读