如何将JavaScript var传递给Rails控制器

时间:2016-02-10 19:43:35

标签: javascript jquery ruby-on-rails camanjs

我希望将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中,再点击提交一次,按预期填充参数。

enter image description here

提前致谢!

1 个答案:

答案 0 :(得分:0)

简短回答: Ajax

目标是将变量(base64图像)的值发送到我的rails控制器,然后在那里,继续使用Ruby。

最后,我创建了一个简单的Ajax函数,通过params

将数据从我的客户端(图像从浏览器)发送到我的服务器(Rails Controller)

<强> 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