【问题标题】:Rails server returning HTML as opposed to JavaScriptRails 服务器返回 HTML 而不是 JavaScript
【发布时间】:2015-09-11 17:03:39
【问题描述】:

我有以下 link_to 助手:

# app/views/users/show.html.erb 

<div id="social">
  <%= link_to "Friends", index_friends_path, id: "index_friends", remote: true %>
</div>

由于:remote 的值设置为true,我的预期是服务器自然会尝试返回带有AJAX 响应的JavaScript。

但是,每次单击链接时,AJAX 响应都包含来自名为 users/friends.html.erb 的文件的 HTML,而不是动态呈现来自 users/_friends.html.erb 的 HTML 的 JavaScript,这将是必需的行为。

我处理请求的代码如下:

--路线:

# config/routes.rb

get '/index_friends' => 'users#friends'

--动作:

# app/controllers/users_controller.rb

def friends
  ...

  respond_to do |format|
    format.js
    format.html
  end
end

--js.erb 模板:

# app/views/friends.js.erb

$("#social").html("<%= j(render("friends")) %>");

相应的 Rails 日志条目如下所示:

# log/development.log

Started GET "/index_friends" for 127.0.0.1 at 2015-09-13 12:20:41 +0100
Processing by UsersController#friends as JS

【问题讨论】:

  • 您应该为您的render 参数使用单引号:$("#social").html("&lt;%= j(render('friends')) %&gt;"); 日志条目对我来说看起来不错,因为它正在输出“UsersController#friends as JS”

标签: javascript jquery html ajax ruby-on-rails-3


【解决方案1】:

试试

"data-type" => "js"

之后

remote: true

【讨论】:

  • 这将日志输出更改为Started GET "/index_friends" for 127.0.0.1 at 2015-09-13 14:11:35 +0100 Processing by UsersController#friends as */* 但响应相同
【解决方案2】:

friends.js.erb 文件位于错误的目录中(app/views/ 而不是 app/views/users)。

为了解决这个问题,我在终端中运行了以下命令:

mv app/views/friends.js.erb app/views/users/friends.js.erb

Rails 现在可以找到此模板,因为按照惯例,来自 users 控制器的格式指令指向 app/views/users 中的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2013-08-23
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多