我希望将JavaScript变量传递给Rails控制器。有趣的是,变量是在Canman
内生成的,我不能在它之外使用它。
这可能只是JavaScript而不一定与Canman有关。但我只是不确定这里发生了什么。
我正在遵循的方法(但如果有更好的方法则完全打开)是使用jQuery填充隐藏字段,只是通过来自控制器的params访问数据。
如果可能的话(如果这是一个好习惯),我想避免使用该表单,只需在点击时调用一些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
});
PostsController
def update
@post = Post.find(params[:id])
raise '¯\_(ツ)_/¯'
...
end
post_params
=> {"base64"=>""}
另外,我读到一个选项可能是发出一个AJAX请求。但是,我不知道如何继续这样做。
在某些时候,我尝试使用text_area而不是hidden_field。 text_area填充了正确的数据。然而,params从未获得数据。如果我通过浏览器按钮返回,数据在text_area中,再点击提交一次,按预期填充参数。
提前致谢!
答案 0 :(得分:0)
简短回答: Ajax 。
目标是将变量(base64图像)的值发送到我的rails控制器,然后在那里,继续使用Ruby。
最后,我创建了一个简单的Ajax函数,通过params
<强> 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
我得到了支持,以实现这个here