0

我希望将 JavaScript 变量传递给 Rails Controller。有趣的部分是变量是在内部生成的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 中,然后再次单击提交,将按预期填充参数。

在此处输入图像描述

提前致谢!

4

1 回答 1

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) }
  })
})

图片控制器.rb

  def create
    @picture = Picture.new(image: params[:image])
    @picture.save
    redirect_to @picture
  end

我在这里得到了实现这一目标的支持

于 2016-04-14T07:26:24.753 回答