【问题标题】:Ajax request returns (406 Not Acceptable )Ajax 请求返回 (406 Not Acceptable )
【发布时间】: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


【解决方案1】:

从日志中: GET "/stars/profile?page=2" 在 profile 之后不包含 .js。所以rails不会在javascript中处理它。

GET "/stars/profile.js?page=2" 应该是调用..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2015-03-13
    • 2019-12-15
    • 2018-07-15
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多