Rails – 可以在javascript函数中设置Rails变量吗?

在javascript函数中设置Rails变量有什么问题吗? 我无法谷歌定义答案,只是想确保没有我不知道的问题或缺陷。 我真的很困惑这是如何工作的 – 如果在客户端执行javascript,我不会假设Rails会在视图呈现后响应视图中的变量..?

(示例)我有多个函数调用相同的表单,我需要知道哪个函数称为表单在控制器方法中执行特定任务(在这种情况下会话是一个cookie,但我也尝试了一个本地Rails变量,它同样有效)。

 $('.open_new_item_form' ).click(function(){ alert('');  alert(''); var url = $(this).attr("href"); $.ajax({ etc... 

警报似乎表明它运作良好。 它将使用当前的valute警告,然后在set之后发出新的“from_new_item”值。

谢谢 – 只是确定

rails的渲染过程的一部分是评估该视图中的所有erb代码。 完成代码评估后,rails将呈现文件(无论是javascript,html等)。

因此,当你说你很惊讶地看到rails可以响应变量时,这是因为视图实际上并未在那时呈现……它正处于渲染过程中。

您的erb文件正在服务器上完全解释; 此行将作为呈现javascript的一部分执行,而不是在客户端上执行javascript时:

  <% session[:item_form_type] = "from_new_item_click" %> 

如果将此行代码放在javascript中, if块的计算结果为false ,则服务器端变量仍将更改:

  if(0){<% session[:item_form_type] = "from_new_item_click" %>;} 

(原谅我的pidgin -javascript,它不是我说的语言。)

正如其他人所说,您的视图首先在服务器上呈现,然后发送到浏览器。 当它到达浏览器时,你的所有Ruby代码早已被执行,你在浏览器中看到的Javascript就是这样的结果。 尝试从浏览器中查看页面的来源; 你应该看到这一行:

 alert('<%= session[:item_form_type]%>'); 

已经被替换,没有任何点击,有:

 alert('from_new_item_click'); 

如果您确实想在用户执行操作时更改服务器端RoR代码,则需要使用AJAX。 基本上,AJAX允许您的Javascript代码向URL发送GET / POST。 因此,在.click事件处理程序中,您可以点击一个URL,该URL调用一个更改所需会话变量的操作。

(对不起,如果你已经了解了所有关于AJAX的内容;我怀疑你可能不会,但是,考虑到你的问题。)