2012-07-27 43 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 %>