【发布时间】:2020-05-09 01:21:51
【问题描述】:
我想从我的 JavaScript 代码向我在 Ruby on Rails 中的显示操作发送一个发布请求,其中包含我想存储在实例变量中的数据,以便我可以将其保存在视图中的表单上并上传到我的服务器。
如下所示,参数 'base64' 显示在我的 rails 日志中,但是当我尝试在我的视图中调用 @base64 时,在获取控制器中的值后,它是 nil。
感谢任何建议,谢谢!
查看
var full_base64 = "data:image/jpeg;base64," + base64;
$.ajax({
data: 'base64=' + full_base64,
type: 'POST',
url: "/videos/show/<%=@video.id%>"
});
控制器
def show
@video = Video.find(params[:id])
if params[:base64].present?
@base64 = params[:base64]
end
end
路线
post 'videos/show/:id', to: 'videos#show'
Rails 服务器日志:
Started POST "/videos/show/1" for 127.0.0.1 at 2020-01-22 12:59:40 -0600
Processing by VideosController#show as */*
Parameters: {"base64"=>"data:image/jpeg;base64,iV...
...
, "id"=>"1"}
控制台
>>
@base64
=> nil
>>
【问题讨论】:
-
“在视图中”是什么意思?您何时/从何处尝试在控制台中访问它?
-
既然这是 AJAX,我想我们需要知道这里的时间线流程。您加载视图,然后通过 AJAX 发送值?然后,您是否使用新数据刷新部分视图?仅仅因为您通过 AJAX 将其发送到控制器并不意味着它会更新当前页面上的任何内容。
-
所以我试图将一个 JavaScript 变量上传到我的 rails 服务器。在我的视图 (html) 中,我在画布中有一张图像,我将其转换为 base64。我想以某种方式将其存储在 Ruby 变量中,以便可以将其作为图像上传到我的服务器。我在网上搜索,普遍的共识是使用 AJAX,但它不适合我。我只是在 Web 浏览器的调试控制台中回显它。
-
@Beartech 我加载视图然后通过 AJAX 发送它。我没有刷新视图。
-
您正在通过 AJAX 发布到您已经在查看的视图。如果你想使用 AJAX,你需要遵循一定的流程。你需要在你的控制器中创建一个接受信息的方法,然后用那个信息做一些事情。然后它应该发回一个 AJAX 响应,更新发送它的页面的某些部分,以便您知道它有效。
标签: javascript jquery ruby-on-rails ajax model-view-controller