是否可以从 Controller 执行 application.js 中包含的 Javascript 函数或相应的 js.coffee 文件,但 不渲染或重新加载 View ? IE。很简单
def connect()
call js: "connect_through_javascript();"
render :nothing => true
end
但不是渲染 :nothing,有什么方法可以保持 View 不变? 也可以用它发送参数,即
def connect(param1, param2, param3)
call js: "connect_through_javascript(#{param1}, #{param2}, #{param3});"
render :nothing => true
end
调用的 Javascript 函数将依次转到另一个 Controller 操作以进行回调。
我正准备尝试使用 Paloma gem,但我只是想知道是否可以在不添加依赖项的情况下实现这些。
最佳答案
您想要的是 AJAX。如果使用 JavaScript 库(如 jQuery),或者如果使用 native JavaScript 时 readyState 为 4 且状态为 200,则 JavaScript 将必须在成功回调中对 HTTP 响应主体进行智能处理。
您受困于 HTTP 请求-响应生命周期。
编辑:这是一个简单的例子:
HTML
<ol id="comments"></ol>
<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);
</script>
Rails Controller
class PostsController < ApplicationController
def comments_ajax
@comments = Comment.where(:post_id => params[:id])
end
end
app/views/posts/comments_ajax.html.erb
的内容:
<%= @comments.each |comment| do %>
<li><%= comment.text %></li>
<% end %>
关于javascript - 从 Rails Controller 执行 Javascript 函数(无需渲染或重新加载 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659307/