javascript - 带有 Rails 的 Ajax,附加 div 不起作用

标签 javascript jquery html ruby-on-rails ajax

我正在尝试使用 AJAX 将 div 附加到我的 HTML 中,系统是在 Rails 中开发的。 这是 js.erb 文件的内容:

$('.posts').append("<%= j render 'post', posts: @post %>")

我真的知道我的代码正在调用这个文件,因为如果我将这些行更改为 alert.('Hello'),警报就会显示在我的网络浏览器上。

问题是没有添加 div。

这是我的 _post.html.erb 的代码

<%= div_for @posts do %>
  <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
  <p><%= post.message %></p>
<% end %>

终端或浏览器检查器中没有显示错误。

[编辑 1] 我现在在 chrome 编辑器中看到,服务器正在向客户端发送一个 ajax。内容是:

   $('.posts').append("")

好像render不渲染,我的代码哪里出了问题?

[编辑2]

Controller 代码如下。调用 ajax 的方法是创建。 我不知道这是否更容易看到,但所有这个项目也都在 github 上:

https://github.com/ricardovsilva/twitter-rubyOnRails/

class PostsController < ApplicationController
    def index
        @posts = Post.order('created_at desc')
        #respond_to :html
    end

    def create
        @post = Post.create(:message => params[:message])
        respond_to do |format|
            if @post.save
                format.html { redirect_to posts_path }
                format.js
            else
                flash[:notice] = "Message failed to save."
                format.html { redirect_to posts_path }
            end
        end
    end
end

HTML 是:

index.html.erb

<%= render partial: "message_form" %>
<div id="posts">
    <%= render partial: @posts %>
</div>      

_message_form.html.erb

<%= form_tag("/posts", remote: true) do %>
    <%= label_tag(:message, "What are you doing?")%><br>
    <%= text_field_tag(:message, nil, size: "44x6") %><br>
    <%= submit_tag("Update") %><br>
<% end %>

_post.html.erb(这是我要呈现并发送到客户端的那个)

<%= div_for @posts do %>
     <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
     <p><%= post.message %></p>
 <% end %>

layouts/application.html.erb(这里是我尝试通过 ajax 添加呈现的 div 的地方)

<!DOCTYPE html>
<html>
<head>
  <title>Twitter</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<div id="content"> 
    <%= yield %>
</div>

</body>
</html>

最佳答案

$('#posts').append("<%= j render 'post', post: @post %>")是您的问题的解决方案。另外 _post.html.erb 必须是:

 <%= div_for post do %>
   <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
   <p><%= post.message %></p>
 <% end %>

关于javascript - 带有 Rails 的 Ajax,附加 div 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794432/

相关文章:

html - 3个具有相同CSS的div,但它们的高度不同

html - 打印友好的布局

javascript - onClick 不适用于 <button> 但适用于 <a>

php - 防止在 Yii 框架上使用 ajaxButton/ajaxSubmitButton 加载 jQuery Assets

javascript - 滚动到最后一个 div 的顶部后转到第一个 div

jquery - 为什么 JSON.stringify() 不将数据传递给 $.cookie()

用于查找数组中不在另一个数组中的元素的 Javascript 算法

javascript - 结合 youtube 自动完成搜索框的 js 和 html 代码。

javascript - 就地修改对象 javascript

javascript - 如何获取 Google 幻灯片标题和幻灯片编号的列表 - Google Apps 脚本