在 ERB 中将 JavaScript 值传递给 Ruby
Passing JavaScript value to Ruby in ERB
我想将 JavaScript 值作为参数传递给 ERB 中的 Ruby 函数。
index.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 的情况下工作。
ruby 控制器:
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(embedded ruby) 如果你把它写在 html 的脚本标签里并且文件是一个 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>
我想将 JavaScript 值作为参数传递给 ERB 中的 Ruby 函数。
index.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 的情况下工作。
ruby 控制器:
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(embedded ruby) 如果你把它写在 html 的脚本标签里并且文件是一个 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>