【问题标题】:JavaScript doesn't like hashes.to_json?JavaScript 不喜欢 hashes.to_json?
【发布时间】:2013-12-08 05:01:46
【问题描述】:

在我的控制器中:

@arr = []
@jsonPosts = Post.each do |p|
  arrLatLng = {}
  arrLatLng["latitude"] = p.lat
  arrLatLng["longitude"] = p.lon
  @arr << arrLatLng
end 
@postsLatLng = @arr.to_json

当我使用console.log(&lt;%= @postsLatLng %&gt;) 时,在视图中我得到了一个意外的令牌和错误,它显示:

console.log([{&quot;latitude&quot;:34.0462002,&quot;longitude&quot;:-118.2044673},{&quot;latitude&quot;:34.0462074,&quot;longitude&quot;:-118...

当我将 arrLatLng 更改为数组时它可以工作:

arrLatLng = []
arrLatLng << p.lat
arrLatLng << p.lon

我想知道:

  1. 解决方法是什么?
  2. 为什么当我将 arrLatLng 更改为数组时这会起作用?

【问题讨论】:

    标签: javascript ruby-on-rails ruby json


    【解决方案1】:

    试试http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-j

    console.log(&lt;%= j @postsLatLng %&gt;)

    另外,完全不相关,但您可以这样做:

    @postsLatLng = Post.inject([]) { |memo, p|
      memo << {latitude: p.lat, longitude: p.lon}
    }.to_json
    

    【讨论】:

    • 很酷,这绝对是一个不错的重构。知道为什么这仍然失败吗?
    • 你说它不起作用是什么意思?找不到j 方法?因为您的 JS 没有转义引号,我 99.999% 确定这是问题所在。
    • console.log([{\"latitude\":34.0462002,\"longitude\":-118.2044673},{\"latitude\":34.0462074,\";我是否需要包含任何内容才能使用 j 方法?
    • 我不这么认为。在您的视图中将console.log(&lt;%= @postsLatLng %&gt;) 替换为console.log(&lt;%= j @postsLatLng %&gt;)
    • 是的,试过了。 =/ 并且对您的重构感到好奇,为什么我要为 Post:Class 获取这个未定义的方法“注入”,我应该在别的东西上调用它吗?
    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2022-08-03
    相关资源
    最近更新 更多