我想将来自JavaScript代码的发布请求发送到Ruby on Rails中的show action,其中包含要存储在实例变量中的数据,因此可以将其保存在视图中的表单上并上传到服务器上。
正如您在下面看到的那样,参数“ base64”显示在我的rails日志中,但是当我尝试在视图中调用@ base64时,在控制器中获取值之后,它为nil。
任何建议表示赞赏,谢谢!
视图
var full_base64 = "data:image/jpeg;base64," + base64;
$.ajax({
data: 'base64=' + full_base64,
type: 'POST',
url: "/videos/show/<%[email protected]%>"
});
控制者
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传递给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
但是您可以随意调用它。在您的控制器中,您将需要以下内容:
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') %>');
它将呈现称为的HTML文件base_64_response.html.erb
,其中需要包含要显示在调用它的页面中的html代码。
<div id="pic_upload">
<%= @base64 =>
</div>
周期是load page
-> do something to trigger AJAX call to controller method
-> process AJAX call with controller method
-> render JS file
->JS file replaces div in page with new html
您可能需要阅读更多有关AJAX在Rails中如何工作的信息。此RailsCast可能会帮助http://railscasts.com/episodes/136-jquery-ajax-revised?view=asciicast
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句