如何将 JavaScript 变量传递给 Rails 控制器
How to pass a JavaScript var into a Rails Controller
我正在寻找 将 JavaScript 变量传递给 Rails 控制器 。有趣的是变量是在 Canman
内部生成的,我不能在它之外使用它(还)。
这可能只是JavaScript,与Canman没有必然联系。但我只是不确定这里发生了什么。
我正在遵循的方法(但如果有更好的方法则完全开放)是用 jQuery 填充隐藏字段,只是为了通过控制器的参数访问数据。
如果可能(如果这是一个好的做法),我想避免这种形式,只需在单击时调用一些 JavaScript,然后将该变量传递给控制器。
查看
= form_for @post do |form|
= form.hidden_field :base64
= form.submit
JavaScript
$('form').submit(function(event){
Caman('#canvas', img, function() {
var imageBase64 = this.toBase64();
alert(imageBase64); // works fine
$('#post_base64').val(imageBase64);
});
alert(imageBase64); // nothing
});
帖子控制器
def update
@post = Post.find(params[:id])
raise '¯\_(ツ)_/¯'
...
end
post_params
=> {"base64"=>""}
另外,我读到一个选项是提出 AJAX 请求。但是,我还不确定如何进行。
在某些时候,我尝试使用 text_area 而不是 hidden_field。 text_area 填充了正确的数据。但是,params 从未获得数据。如果我通过浏览器按钮返回,数据在 text_area 中,然后再次单击提交,按预期填充参数。
提前致谢!
简答:Ajax.
目标是将变量的值(一个 base64 图像)发送到我的 rails 控制器,一旦到达那里,就继续 Ruby。
最后,我创建了一个简单的 Ajax 函数,通过 params
[=14 将数据从我的客户端(来自浏览器的图像)发送到我的服务器(Rails 控制器) =]
save_canvas.js
$(document).on('click', '.save_canvas', function() {
event.preventDefault()
var base64Data = canvas.toDataURL('png')
$.ajax({
type: "POST",
url: "http://localhost:3000/pictures/",
data: { image: base64Data },
success: function(post){ console.log('success') },
error: function(post){ console.log(this) }
})
})
pictures_controller.rb
def create
@picture = Picture.new(image: params[:image])
@picture.save
redirect_to @picture
end
我得到了实现此目标的支持
我正在寻找 将 JavaScript 变量传递给 Rails 控制器 。有趣的是变量是在 Canman
内部生成的,我不能在它之外使用它(还)。
这可能只是JavaScript,与Canman没有必然联系。但我只是不确定这里发生了什么。
我正在遵循的方法(但如果有更好的方法则完全开放)是用 jQuery 填充隐藏字段,只是为了通过控制器的参数访问数据。
如果可能(如果这是一个好的做法),我想避免这种形式,只需在单击时调用一些 JavaScript,然后将该变量传递给控制器。
查看
= form_for @post do |form|
= form.hidden_field :base64
= form.submit
JavaScript
$('form').submit(function(event){
Caman('#canvas', img, function() {
var imageBase64 = this.toBase64();
alert(imageBase64); // works fine
$('#post_base64').val(imageBase64);
});
alert(imageBase64); // nothing
});
帖子控制器
def update
@post = Post.find(params[:id])
raise '¯\_(ツ)_/¯'
...
end
post_params
=> {"base64"=>""}
另外,我读到一个选项是提出 AJAX 请求。但是,我还不确定如何进行。
在某些时候,我尝试使用 text_area 而不是 hidden_field。 text_area 填充了正确的数据。但是,params 从未获得数据。如果我通过浏览器按钮返回,数据在 text_area 中,然后再次单击提交,按预期填充参数。
提前致谢!
简答:Ajax.
目标是将变量的值(一个 base64 图像)发送到我的 rails 控制器,一旦到达那里,就继续 Ruby。
最后,我创建了一个简单的 Ajax 函数,通过 params
[=14 将数据从我的客户端(来自浏览器的图像)发送到我的服务器(Rails 控制器) =]
save_canvas.js
$(document).on('click', '.save_canvas', function() {
event.preventDefault()
var base64Data = canvas.toDataURL('png')
$.ajax({
type: "POST",
url: "http://localhost:3000/pictures/",
data: { image: base64Data },
success: function(post){ console.log('success') },
error: function(post){ console.log(this) }
})
})
pictures_controller.rb
def create
@picture = Picture.new(image: params[:image])
@picture.save
redirect_to @picture
end
我得到了实现此目标的支持