【问题标题】:Rails accessing json object in javascriptRails在javascript中访问json对象
【发布时间】:2014-09-30 09:09:50
【问题描述】:
var errorList = "<%= object.errors.messages.to_json %>";

在上面的代码中object.errors.messages存储了如下所示的Hash值。

{ 
  :username => [
    "can't be blank", 
    "is too short (minimum is 8 characters)"
  ],
  :first_name => [
    "can't be blank"
  ],
  :last_name => [
    "can't be blank"
  ], 
  :email => [
    "can't be blank",
    "is invalid"
  ],
  :secondary_email => [ 
    "can't be blank",
    "is invalid",
    "has already been taken"
  ],
  :password => [ 
    "can't be blank"
  ]
}

我想在 javascript 中以 json 对象的形式访问此哈希值,以便我可以方便地访问每个错误消息(例如 errorList.username、errorList.first_name 等)。所以我正在尝试将该哈希值转换为 json 和将其分配给 errorList 变量。这样我就可以访问错误消息(例如 errorList.username、errorList.first_name 等)。

<%= object.errors.messages.to_json %>" /*here i am trying to convert hash value into json

但是我无法使用上面的代码做到这一点,如果有的话,告诉我该代码中的错误,否则告诉我如何在 ruby​​ 中将哈希值作为 javascript 中的 json 访问。

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    您将 json 作为字符串传递,javascript 不知道它是 json。此外,该字符串不是 html_safe,因此 ruby​​ 会尝试转义它。你需要告诉 rails 它是安全的并解析它:

    var errorList = JSON.parse("<%= object.errors.messages.to_json.html_safe %>");
    

    但是,这不是最好的方法。有一个非常漂亮的 gem,叫做 gon。它允许您轻松地将 ruby​​ 变量传递给您的 javascript,并将此逻辑从您的视图移动到您的控制器。

    # controller
    gon.errorList = object.errors.messages
    
    # javascript
    gon.errorList      #=> {"username": ["can't be blank", ....], ...}
    

    【讨论】:

    • it is not working 不是正确的错误描述。您能否详细说明您想要的结果是什么以及您得到的结果是什么?
    • 对不起,我没有看到你的评论,我使用了 var errorList = ;
    • 对不起,我没有看到你的评论,我使用了 var errorList = ;我刚刚删除了 ruby​​ 代码周围的双引号和 JSON.parse。所以我成功地将 json 分配给 errorList,现在我可以使用 errorList["username"] 或 errorList.username 访问错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2022-07-06
    • 2011-09-24
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多