javascript - 从 Rails Controller 执行 Javascript 函数(无需渲染或重新加载 View )

标签 javascript ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

是否可以从 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/

相关文章:

ruby-on-rails - link_to_remote 与渲染

javascript - Ruby on Rails : Open Modal Box Link doesn't work Update: link_to_remote

ruby - 为什么 random 在 Ruby 中这样工作?

javascript - 如何获取不同图像jquery的具体src?

mysql - 从 PHP 应用程序导入 Rails 应用程序时出现 UTF-8 编码问题

javascript - 如何使用 Jest 测试组件是否正确计算数组长度

ruby-on-rails - Bundler 找不到 gem "activerecord": 的兼容版本

css - 如何提取不属于子节点的文本?

javascript - 这些额外参数如何与 map() 一起使用?

javascript - 相对于另一个元素而不是其父元素定位元素