【发布时间】:2013-06-20 02:13:31
【问题描述】:
在我的 Rails 应用程序中,javascript 模板 profile.js.erb 不会被渲染。我收到错误代码406 Not Acceptable。该模板应该在 star#profile 视图中附加部分内容。 Ajax 请求是由 jquery 无限滚动插件发出的。这是我的代码
。
动作
def profile
@page=params[:page] ||1
@videos=Video.all(:page=>@page)
respond_to do |format|
format.js
format.html
end
end
查看星星#profile
<div id="content">
<div class="post">
<%=render 'videos'%>
</div>
profile.js.erb
$('div.post').append("<%=escape_javascript(render 'videos')%>");
路线
match "stars/profile/:page"=> "stars#profile", :via => :get
登录控制台
Started GET "/stars/profile?page=2" for 127.0.0.1 at 2013-06-20 00:05:58 -0500
Processing by StarsController#profile as application/JavaScript
Parameters: {"page"=>"2"}
Completed 406 Not Acceptable in 65836ms
Ajax 设置
jQuery.ajaxSetup({
'beforeSend': function(xhr, settings) {
xhr.setRequestHeader("Accept", "application/javascript");
var token=$('meta[name="csrf-token"]').attr('content');
xhr.setRequestHeader('X-CSRF-Token',token );
settings['dataType'] = "javascript";
settings['contentType'] = "application/javascript";
}
});
【问题讨论】:
-
StarController 处理旁边的注释将配置文件称为 JSON。查看控制器中的格式,以确保它是 html 或 js。如果格式是 json,这将解释为什么你会得到 406,因为你的控制器没有处理这种格式。
-
当我添加解决
406 error code的 format.json 但我需要 profile.js.erb 来渲染不是 json -
我认为您必须在请求中将接受标头设置为
application/javascript,但不知道该怎么做,请检查api.jquery.com/jQuery.ajax/#jQuery-ajax-settings -
我更新了问题,请参阅我的 ajax 设置。
-
控制台日志中的配置文件现在显示 javascript。格式还是不匹配js吗?查看实际生成请求的代码段也可能很有用。
标签: ruby-on-rails ajax ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2