【问题标题】:Rails 4 trying to parse POST JSON in controllerRails 4 试图在控制器中解析 POST JSON
【发布时间】:2015-10-30 03:26:32
【问题描述】:

我有一个控制器,它带有在我的数据库中创建行的路径

页面 model.js 有一个执行 ajax 发布的函数

function autoSaveVideo(playPos){
        $.ajax({
            type: "POST",
            url: "/video_views/create",
            dataType: "json",

            data: { 
                play_position: 0,
                user_id: $('.user_id').text(),
                video_id: $('.video_id').text()
            },
            error: function (data) {
                console.log(data);
                return data
            }
        });
        setTimeout(autoSaveVideo, 6000);

然后我有控制器

渲染 :nothing => true, :status => 200, :content_type => :json

这会发送一个成功的 200 响应

但如果我添加到 video_views_controller.rb

jData = JSON.parse(request.body.read)

我在控制台中收到 795:意外令牌

如何解析它以便访问数据对象?

【问题讨论】:

  • 您可以在控制器中使用params[:data] 获取参数检查中的数据。
  • 它是与我发送的控制器不同的控制器......我从视频页面的 js(以及videos_controller)发送到控制器view_views_controller

标签: javascript ruby-on-rails json ajax


【解决方案1】:

Pardeep 几乎是正确的。您需要使用params 方法来访问您发送的数据对象中的值。所以params['play_position']等

明确列出您期望和允许的密钥是一种安全最佳做法。有关强参数,请参阅 Rails 指南。

http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters

【讨论】:

  • 感谢 Richard - 帮了大忙。
【解决方案2】:

您可以使用控制器中的params[:data] 在参数检查中获取数据。您随请求发送的所有内容都将作为参数接收到控制器中。只有您在标头中发送的数据不会作为参数接收。

【讨论】:

  • 只是为了清楚我正在将数据从我的页面发送到我的服务器,该服务器应该将 json 数据发布到不同的模型 - 不会有任何参数?在按照你的建议做了之后,我得到了一个 TypeError(没有将 nil 隐式转换为字符串)
  • 我想你只是想将一些数据发布到videos_views控制器的create方法中。
  • 如果我这样做了,我必须在videos_views 控制器中创建一个不是videos_views 的创建动作的动作。我正在为“VideoViews”表而不是“Videos”表创建一个新行。是的,我可以在 vidoes 控制器中执行此操作并在那里创建一个单独的操作,但我打算使用 videoviews 控制器。我仍然需要知道为什么它没有正确解析。
  • 好的,我有 params[:user_id] 等等,这很有效 - 但是我得到了 user_id 和 video_id 的 nan
  • 感谢您对 Pardeep 的帮助 - 我在 google 视频群聊中向您发送了消息,与您讨论您的其他一些 github 项目,所以当您有更改时请给我发送消息。干杯。
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多