我想将 JavaScript 代码中的发布请求发送到 Ruby on Rails 中的显示操作,其中包含我想要存储在实例变量中的数据,以便我可以将其保存在 View 中的表单中并上传到我的服务器。
正如你在下面看到的,参数“base64”显示在我的rails日志中,但是当我尝试在我的 View 中调用@base64时,在获取 Controller 中的值后,它是nil。
如有任何建议,我们将不胜感激,谢谢!
查看
var full_base64 = "data:image/jpeg;base64," + base64;
$.ajax({
data: 'base64=' + full_base64,
type: 'POST',
url: "/videos/show/<%=@video.id%>"
});
Controller
def show
@video = Video.find(params[:id])
if params[:base64].present?
@base64 = params[:base64]
end
end
路线
将“videos/show/:id”发布到:“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 传递给 Controller 中的 show
操作。这是一个非常笼统的答案,因为您未能包含任何 HTML 代码,并且看起来您没有启动 AJAX 的按钮。但我会尽力为您指明正确的方向。您需要按照以下一般原则做一些事情:
var full_base64 = "data:image/jpeg;base64," + base64;
$.ajax({
data: 'base64=' + full_base64,
type: 'POST',
url: "/videos/my_ajax_upload"
});
这会将您的 AJAX 调用发送到我称为 my_ajax_upload
的 Controller 方法,但您可以随意命名它。在你的 Controller 中你需要类似的东西:
def my_ajax_upload
@video.update(base_64: params[:base64])
respond_to do |format|
format.js {render :action => "base_64_response" }
end
end
这会通过保存发送到数据库的参数来响应初始 AJAX 调用,并通过调用名为 base_64_response.js.erb
的文件进行回复,该文件可能类似于:
$('#pic_upload').html('<%= escape_javascript(render :partial => 'base_64_response') %>');
它将呈现名为 base_64_response.html.erb
的 HTML 文件,该文件需要包含您希望在调用它的页面中显示的 html 代码。
<div id="pic_upload">
<%= @base64 =>
</div>
循环是加载页面
-> 做一些事情来触发对 Controller 方法的AJAX调用
-> 使用 Controller 方法处理AJAX调用
-> 渲染JS文件
-> JS文件用新的html替换页面中的div
您可能需要阅读更多有关 AJAX 在 Rails 中如何工作的信息。这个 RailsCast 可能有帮助 http://railscasts.com/episodes/136-jquery-ajax-revised?view=asciicast
关于javascript - 使用 AJAX 将参数传递给 Rails Controller 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59867236/