答案是:
我有一个带有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}'"
但它会使页面重新加载/刷新,这是我不想要的。
答案 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