javascript - 使用 AJAX 将参数传递给 Rails Controller 时出现问题

标签 javascript jquery ruby-on-rails ajax model-view-controller

我想将 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/

相关文章:

javascript - 无法使用 jQuery 更改背景位置

jquery - (document).ready(function () 没有运行函数

ruby-on-rails - 我们可以在运行时动态更改与Rails App上的Elasticsearch服务器的连接吗

ruby-on-rails - 在RoR,ElasticSearch和Searchkick中在归属关系中搜索

ruby-on-rails - 使用 redis ruby​​ gem,如何从匹配模式的 redis 中清除一组键?

javascript - 显示代码中 javascript 错误的工具

页面加载和 Bootstrap 进度条上的 Javascript 计时问题

javascript - angularjs 中的动态填充 orderby 不使用输入的第二个变量

javascript - "Disallow"当另一个正在执行 jQuery 时执行一个事件

javascript - 如果所有图像都具有相同的宽度,请执行某些操作