【发布时间】:2016-02-19 16:17:09
【问题描述】:
在这里遇到了一个相当神秘的问题。使用 Rails 4 应用和 Google Maps Javascript API v3。
我们使用 Google 搜索自动完成功能来获取 Google 的“地点”对象,然后将该地点对象传递给 Rails,以便存储某些属性(例如 google_place_id、lat、long)。
直到昨天,我们的代码都运行良好。奇怪的是我们没有触及那段代码,然后这部分突然中断了。
CoffeeScript 代码:
saveDestinationToDatabase = (place) ->
console.log 'Place.geo.loc: ' + place.geometry.location
console.log 'Place.stringify: ' + JSON.stringify(place)
$.ajax '/destinations',
dataType: 'json'
type: 'POST'
async: false
data:
place: JSON.stringify(place)
trip_id: tripID
success: (data) ->
return data
failure: ->
alert 'saveDestiantionToDatabase() Unsuccessful'
return
第一个 console.log 返回:
Place.geo.loc: (41.87194, 12.567379999999957),表示Geometry对象的值正确。
第二个 console.log 返回:
Place.stringify: {"address_components":[{"long_name":"Italy","short_name":"IT","types":["country","political"]}],"adr_address":"<span class=\"country-name\">Italy</span>","formatted_address":"Italy","geometry":{"location":{},
...}
请注意,geometry.location 现在是空白的。
- 为什么 JSON.stringify 会导致该值被删除?
- 为什么在不更改代码的情况下会开始出现此错误?
更新:解决方案 背负 Dr.Molle 在下面的回答,我刚刚从我需要的 PlaceResult 详细信息中创建了一个 JSON 对象。这让我可以事先调用 Google 的 lat() 和 lng() 方法。
工作咖啡脚本:
saveDestinationToDatabase = (place) ->
place_lat = place.geometry.location.lat()
place_lng = place.geometry.location.lng()
$.ajax '/destinations',
dataType: 'json'
type: 'POST'
async: false
data:
place:
name: place.name
place_id: place.place_id
formatted_address: place.formatted_address
address_components: place.address_components
lat: place_lat
lng: place_lng
trip_id: tripID
success: (data) ->
return data
failure: ->
alert 'saveDestiantionToDatabase() Unsuccessful, please alert site admins'
return
【问题讨论】:
-
Google 是不是在你背后偷偷溜进了
toJSON方法? -
如果我将
JSON.stringify(place)替换为place,控制台中的结果为Place.stringify: [object Object]。看起来 Google 并未对对象进行 JSON 化处理。 -
你误会了。当你调用
JSON.stringify(o)时,它会在o内部任何有这样一个方法的东西上调用toJSON:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript json google-maps coffeescript