【问题标题】:Rails: How to turn JS object to array paramsRails:如何将 JS 对象转换为数组参数
【发布时间】:2013-11-28 18:31:34
【问题描述】:

我有这个 JS 对象:

obj = {id: 80, attr_name: "头像", style: "small", upload_path: null}

然后我将这个对象作为带有 AJAX 的参数发布到控制器。我想在参数中看到的是这样的:

params[:attachment][:id] = 80
params[:attachment][:attr_name] = "avatar"

等等等等……

所以在 JS 方面我创建了一个包含附件参数的对象:

{attachment:obj}

虽然我确实得到了 params[:attachment] 结果它是 [object Object]。

如何将我的 JS 对象转换为 params[:attachment] 中的数组?

谢谢,

【问题讨论】:

  • 如何发送 Post 请求?你可能是通过 jQuery 的 $.post 来做的吗?

标签: javascript ruby-on-rails ruby-on-rails-3


【解决方案1】:

一种方法是,而不是 {attachment: obj} 让它像这样:

postData = {
  "attachment[id]": obj.id,
  "attachment[attr_name]": obj.attr_name
}

另一种方法是将JS对象字符串化为JSON,并在另一边进行JSON.parse。

然而 jQuery.ajax,当你将一个对象传递给“data”参数时,应该按原样发送它。见:Post an object as data using Jquery Ajax

【讨论】:

    【解决方案2】:

    假设您使用的是 jQuery(这是 Rails 的默认设置),这将起作用:

    <h1>TEST</h1>
    
    <script type="text/javascript">
    
      $(function() {
    
        params = {};
        params.attachment = {};
        params.attachment.id = 80;
    
        $.post( "/the_action", params, function(data) {
          alert("response");  
        }, "json");
    
      });
    
    </script>
    

    您可以像这样在控制器中验证这一点:

    class MainController < ApplicationController
      respond_to :html, :json
      def index
    
      end
    
    
      def the_action
        print params
        puts params[:attachment][:id]
        render nothing: true
      end
    
    end
    

    这应该以您想要的格式打印数据。

    【讨论】:

    • 虽然我的逻辑告诉我它应该工作,但它没有。我不知道为什么。
    • 这是构建 JS 对象的标准方式。如果它不起作用真的很奇怪。
    • 这是不正确的,因为你会收到 {"attachment"=>"{\"id\":\"80\"}", "format"=>:json, "action" =>"the_action", "controller"=>"main_controller"} 作为 rails 服务器中的参数。
    猜你喜欢
    • 2012-05-07
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多