Execute Javascript function from Rails controller (without rendering or reloading the view)
是否可以从控制器执行application.js或相应的js.coffee文件中包含的Javascript函数,而无需呈现或重新加载视图? IE。只是一个简单的
1 2 3 4 | def connect() call js:"connect_through_javascript();" render :nothing => true end |
但是除了呈现:nothing之外,还有什么方法可以使视图保持不变?
也可以使用它发送参数,即
1 2 3 4 | def connect(param1, param2, param3) call js:"connect_through_javascript(#{param1}, #{param2}, #{param3});" render :nothing => true end |
被调用的Javascript函数将转到其回调的另一个控制器动作。
我将尝试使用Paloma gem,但我只是想知道在不添加依赖项的情况下是否有可能实现。
您想要的是AJAX。如果使用JavaScript库(如jQuery),或者如果readyState为4,并且如果使用本机JavaScript,则状态为200,则JavaScript将必须对成功回调中的HTTP响应主体进行智能化处理。
您陷入了HTTP请求-响应生命周期中。
编辑:这是一个简单的示例:
HTML
1 2 3 4 5 6 7 8 9 10 11 12 | <script type="text/javascript"> var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { document.getElementById("comments").innerHTML = this.responseText; } }; xhr.open("GET","/posts/123/comments_ajax"); xhr.send(null); |
Rails控制器
1 2 3 4 5 6 7 | class PostsController < ApplicationController def comments_ajax @comments = Comment.where(:post_id => params[:id]) end end |
的内容
1 2 3 4 5 6 7 | <%= @comments.each |comment| do %> <li> <%= comment.text %> </li> <% end %> |