我想将 JavaScript 值作为参数传递给 ERB 中的 Ruby 函数。
索引代码.html.erb
function ABC(){
variable = document.getElementById('textfield').value;
}
function XYZ(){
<%= ruby_function(variable) %>
}
我需要帮助才能实现这一目标。
实现此目的的适当方法是在脚本中使用 ajax。
例如,您可以使用咖啡脚本并执行类似操作。
ABC = ->
variable = document.getElementById('textfield').value
res = $.ajax(
url: '#{method_controller_path}'
method: 'GET'
data:
param: variable
dataType: 'json'
success: (res) ->
res
)
最后,您将可以使用 res 对象。
如果您不使用咖啡或外部脚本文件。您可以使用 index.html.erb 文件中的 javascript 来执行此操作。
下面是一个示例。
const ABC = function() {
let res;
const variable = document.getElementById('textfield').value;
return res = $.ajax({
url: '#{method_controller_path}',
method: 'GET',
data: {
param: variable
},
dataType: 'json',
success(res) {
return res;
}
});
};
希望这对你有帮助。 :)
这个灵魂在没有Jquery的情况下工作。
红宝石控制器:
class MyServiceController
def variable
@var = ruby_function(params[:js_var])
responde_to do |format|
format.js { render json: @var }
end
end
end
js 函数:
function XYZ(){
var variable = document.getElementById('textfield').value;
var xhr = new XMLHttpRequest();
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.open('POST', 'myservice/variable');
xhr.onload = function() {
var rubyResponse = xhr.responseText;
};
xhr.send(encodeURI('js_var=' + variable));
}
如果您将 ERB(嵌入式 ruby( 写入 html 中的脚本标签中并且该文件是 ERB 文件,则可以使用 ERB(嵌入式红宝石(。此 javascript 中的 ruby 代码示例是良性的,但说明了如何执行此操作。
<body>
<%= render 'shared/overlay' %>
<%= render 'shared/notice_alert_modals' %>
<header>
<%= image_tag header_logo, class: 'logo' %>
</header>
<div class="content">
<%= yield %>
</div>
<script>
$(document).ready(function(){
// append some tag with erb ruby
var html = "<h2>ABC<%= %w[D E F].split(' ').join %></h2>"
$('body').append(html)
})
</script>
</body>