在Maps事件处理程序中未定义JSON对象属性

时间:2012-05-06 21:54:30

标签: javascript jquery json google-maps-api-3

我在这里阅读了一些主题,并且我了解globalSettings功能无法使用google.maps.event.addDomListener属性存在范围问题。

console.log语句返回undefined,但如果我console.log(globalSettings),则显示对象及其属性。

如何使属性可用,以便我可以使用它们初始化地图中心并缩放?

var globalSettings = jQuery.parseJSON(wpmm_settings);
var ICON = new google.maps.MarkerImage('medicare.png', null, null,
    new google.maps.Point(14, 13));

var SHADOW = new google.maps.MarkerImage('medicare-shadow.png', null, null,
    new google.maps.Point(14, 13));

google.maps.event.addDomListener(window, 'load', function(globalSettings) {
    console.log(globalSettings.map_center_lat);
  var map = new google.maps.Map(document.getElementById('map-canvas'), {
    center: new google.maps.LatLng(globalSettings.map_center_lat, 135),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });...

1 个答案:

答案 0 :(得分:1)

wpmm_settings是一个字符串:

"[{\"default_zoom\":\"8\",\"map_center_lat\":\"51.4992913\",\"map_center_lng\":\"-0.1639785\"}]"

globalSettings是解析该字符串的结果:

[Object { default_zoom="8", map_center_lat="51.4992913", map_center_lng="-0.1639785"}]

请注意,由于最外面的方括号,它最终会成为单个元素数组。

map_center_lat的值为globalSettings[0].map_center_lat

如果你从字符串中取出最外面的方括号,那么你就会得到一个"裸露的"对象,可以按预期访问属性。

然后...

google.maps.event.addDomListener(window, 'load', function(globalSettings) {...

不会将globalSettings传递给事件处理程序。传递事件 - 这是标准行为:事件被传递给事件处理程序。此行的作用是将该函数内的globalSettings设置为window.load事件。所以你需要用globalSettings替换evt之类的内容,你可以在函数内忽略它。

您的代码段中的...代码仍然存在问题,但正确使用对象和事件处理程序会使查找更容易。