网站在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 %>
答案 0 :(得分:0)
浏览器如何解释来自服务器的响应内容取决于(其中包括)Content-Type标头。
如果内存对我有好处:在这种情况下,因为控制器没有任何其他格式而不是js来响应,它也会响应js用于html /文本内容类型请求。
尝试在format.any { render plain: 'Hello' }
之后添加其他格式,例如format.js
,以调试问题。
如果你看到“你好&#39;字符串而不是你的js,那是因为你的请求中缺少Content-Type标题。
我希望这会有所帮助。