0

是否可以執行包含在application.js中的Javascript函數或來自控制器的相應js.coffee文件,但是沒有渲染或重新加載視圖?即只是一個簡單的從Rails控制器執行Javascript函數(不渲染或重新加載視圖)

def connect() 
    call js: "connect_through_javascript();" 
    render :nothing => true 
end 

,而不是渲染而是:什麼,是有一些方法的觀點可以保持不變? 也纔有可能與它發送參數,可以即

def connect(param1, param2, param3) 
    call js: "connect_through_javascript(#{param1}, #{param2}, #{param3});" 
    render :nothing => true 
end 

JavaScript函數稱爲又將去到另一個控制器動作爲它的回調。

我即將嘗試使用Paloma gem,但我只是想知道是否有可能不添加依賴關係。

回答

1

你想要的是AJAX。然後,如果使用JavaScript庫(如jQuery),或者readyState爲4,並且如果使用本機JavaScript,則狀態爲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的控制器

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 %> 
+0

感謝您的非常明確的實施示例。 :)帕洛瑪寶石似乎適用於我目前的問題,但在某些情況下,我更喜歡你的解決方案。 – jiku

+0

我以前沒有使用過Paloma。看起來很有趣。我認爲這是一個Ruby類庫,用於在Rails方面簡化Ajax,另外還有一個JavaScript類庫,用於創建JavaScript類以更輕鬆地與Rails RESTful服務交互? –