2012-07-27 97 views
0

我已經寫了一個ruby函數,並且希望將它放在js文件中,js函數應該能夠調用ruby函數並存儲返回值。從java腳本函數調用ruby函數

可能嗎?如何做這個任務?

+1

Javascript是瀏覽器(客戶端)上的運行時環境。我假設你的服務器端環境是Rails,它是一個不同的運行環境(服務器端)。客戶端使用HTTP協議向服務器端發出請求。當你說「從JavaScript函數調用ruby」時,你基本上想要做的就是「通過瀏覽器進行AJAX調用,以便在服務器端執行數據庫操作」。一旦你瞭解這種互動,你將能夠搜索正確的地方,並得到適當的相關答案恕我直言。 – 2012-07-27 08:18:24

回答

1

你需要實現取決於當你調用Ruby代碼或功能

  1. 難道是在創建或渲染頁面或JS嗎?

    然後你可以使用帶有.erb擴展名的js(如超級工程師建議的) 這允許你調用視圖和應用程序助手中可用的任何ruby代碼和函數。

    如demo.js.erb

    var arr = "<%= call_function %>" 
    
  2. 你需要從客戶端的功能? 然後就不可能直接調用這個函數,你需要爲這樣的場景使用ajax。 (如Spernsky Danil所建議)

+0

我知道我正在振興一條舊線索。你寫了<%= call_function%>這個call_function在哪裏?假設我想要調用一個控制器方法,我該怎麼做? – 2013-09-11 20:01:17

+0

@ MaxRose-Collins它可以是任何可以通過視圖訪問的有效函數,可以在助手或任何地方,但應該可以在視圖中訪問 – PriteshJ 2013-09-12 06:56:16

+0

好吧,如果我在application_helper中有助手,我可以從js.erb文件位於assets/javascripts?像這樣,var response ='<%= solve()%>' – 2013-09-12 07:40:49

2

我認爲這是不可能的,有幾個原因:

  1. 瀏覽器不支持Ruby的
  2. 的JavaScript和Ruby具有的不同類型系統我不知道他們之間
  3. 任何接口
  4. 你也不能把JavaScript代碼和Ruby代碼在一個文件中,因爲有這樣的文件

所以沒有MIME類型,我想你應該你的Ruby功能轉換爲JavaScript的FUNC它在。

或者您可以將您的Ruby功能作爲Server API的一部分實現,並通過Ajax從JavaScript調用它。

1

JavaScript是客戶端語言,Ruby是服務器端語言,他們不能直接調用對方,而是使用AJAX或WS代替服務器和客戶端之間的通信。

+0

你可以在服務器(node.js)和客戶端上的紅寶石(如果客戶端是一個獨立的應用程序,而不是網絡瀏覽器)::) – 2012-07-27 07:21:14

+2

即使這樣你不能從另一端調用函數,而不使用tcp/IP通信,仍然有趣,巨魔? – micnic 2012-07-27 07:38:37

0

那麼你可以有js.erb文件。您可以在其中包含Ruby代碼。只要看看我的項目中的代碼片段即可。

$("#myModal").modal('hide'); 
<% if @status == "ok" %> 
    <%= add_gritter("We will contact you as soon as possible!", :image => :success, :class_name => "gritter-light") %> 
<% else %> 
    <%= add_gritter("Something went wrong while saving you request. Please try again!", :image => :error, :class_name => "gritter-light") %> 
<% end %>