在没有用户输入的情况下每隔一秒从AJAX调用创建的帖子,html视图?

时间:2017-03-17 16:08:25

标签: javascript ruby-on-rails ajax

答案是:

Render a view in rails via AJAX and controller

我有一个带有Post模型的rails应用程序,其中:创建和保存新帖子;旧的是毁灭;这是从setInterval()函数中的AJAX调用集每隔10秒自动完成的,如我的application.js文件中所示:

var post_value = 0;
setInterval(function(){

        $.get('https://api.test', function(data){
            post_value = data.result.c[0];
        });

        $.ajax({
          type: "POST",
          url: "/posts",
          data: { parameter: post_value }
        });

    }, 1000);

到目前为止,非常好,我可以看到,在rails控制台中,每秒钟AJAX调用都会保存新帖子并销毁旧帖子。这是我的控制器:( AJAX POST通过简单的路线与创建动作交互:发布#create)

  def index
    @posts = Post.all
    @bet_last = Bet.last
  end

  def create
    @post = Post.new
    @post.value = params["parameter"]
    @post.save  
    Post.first.destroy

    @last_post = Post.last
    @posts = Post.all

    render "index"

  end

以下是相应的html视图:(index.html.erb)

<% @posts.each do |p|%>
    <tr>
        <th scope="row"><%= p.id%></th>
        <td>...</td>
        <td><%= p.value%></td>
        <td>Active</td>
    </tr>
<%end%>

我的问题是我希望显示html表行而不刷新添加和删除帖子的页面。 我知道如果帖子是从表单创建的,我可以使用data-remote = true并链接其余的但在我的情况下帖子是在控制器中创建的,没有用户输入,所以我没有正常设置为你会有一个表格。 如何反映html中的更改以便动态显示?

感谢您的指导。

PS:我可以看到,在浏览器控制台中,html每秒都会更改,但我无法在页面上动态反映,但在浏览器控制台中它可以正常工作。

修改

在我的控制器中使用以下渲染(而不是渲染“index”)可以解决问题:

render :js => "window.location = '#{root_path}'"

但它会使页面重新加载/刷新,这是我不想要的。

2 个答案:

答案 0 :(得分:0)

关于你ajax调用添加成功回调并从那里更新你的html

$.ajax({
      type: "POST",
      url: "/posts",
      data: { parameter: post_value },
success: function(data){
// update your html here
}

    });

答案 1 :(得分:0)

我已经开启了另一个问题,从我的所有新理解中更清楚,更清楚。 它解决了:-)

Render a view in rails via AJAX and controller

我无法理解控制器中的渲染:

def create
  # your logic here 
  render json: @bet
end