js.erb输出为文本而不是js

时间:2017-02-17 22:55:09

标签: ruby-on-rails-5

网站在localhost上工作正常,但是当上传到Heroku时,create.js.erb的结果以文本形式输出,并输出到地址:site / supporters.js,不明白为什么。该网站只是一个带有支持者表单的页面,在提交时,应该在页面上呈现表单和支持者列表。

页:

<div class="row">
  <div class="col-md-12">
    TEXT
  </div>
</div>
<br>


<div class="row"> 
  <div class="col-md-4">
    <div id="home_form">
      <%= render "supporters/form" %>
    </div>
  </div>
  <div class="col-md-2">
  </div>
  <div class="col-md-6" id="home_list">
    <br>
    <%= render 'supporters/show_supporters' %>
  </div>
</div>

控制器:

class SupportersController < ApplicationController

  ...  
  def create
    @supporter = Supporter.new(supporter_params)
    @supporters = Supporter.all.order(created_at: :desc)

    respond_to do |format|
      format.js
    end
  end

  ...

create.js

<% if @supporter.save %>
    $("#home_list").html("<%= j render 'show_supporters' %>")
    $("home_form").html("<%= j render 'form' %>")
<% else %>
    $("#home_form").html("<%= j render 'form', supporter: @supporter %>") 
    $('#build_error').remove();
    <% if @supporter.errors.any? %>
      var build_error = "<div class='alert alert-danger' id='build_error'>";
      build_error += "You've got <%= pluralize(@supporter.errors.count, 'error') %>.";
      build_error +=   "<ul id='error_explanation'>";
      <% @supporter.errors.full_messages.each do |msg| %>
        <% if msg === "Ip has already been taken" %>
            <% msg = "You've already posted your support.   Thanks!" %>
        <% end %>
        build_error += "<li><%= j msg %></li>";
      <% end %>
      build_error +=   "</ul>";
      build_error += "</div>";
      $(build_error).insertBefore( "#home_form" );
    <% end %>           
<% end %>

1 个答案:

答案 0 :(得分:0)

浏览器如何解释来自服务器的响应内容取决于(其中包括)Content-Type标头。

如果内存对我有好处:在这种情况下,因为控制器没有任何其他格式而不是js来响应,它也会响应js用于html /文本内容类型请求。

尝试在format.any { render plain: 'Hello' }之后添加其他格式,例如format.js,以调试问题。

如果你看到“你好&#39;字符串而不是你的js,那是因为你的请求中缺少Content-Type标题。

我希望这会有所帮助。