0

我最近才开始使用 html、javascript、webapps 等,我决定尝试编写自己的 Prey 独立网络服务器。

我在 UI 上使用 Twitter Bootstrap,在 javascript 上使用 jQuery。我的报告页面列出了所有报告,并允许用户选择一个在地图上查看。然后页面从服务器获取数据作为 JSON,一切正常。但是,当我调用地图时map.setCenter(new google.maps.LatLng(data['lat'], data['lng'])),地图只是变成灰色而不是移动到那个位置。

我已经在 chrome 和 firefox 中尝试过这个,我遇到了同样的问题。奇怪的是,chrome console-debugger-thing 和 firebug 都没有错误。我可以在“类似问题”下看到大约 10 个类似的问题;但是,这些解决方案(例如 CSS)都没有帮助。

这是网站(它是 dotCloud 上的沙箱,所以它可能会很慢):http ://prey-geniass.dotcloud.com/devices/l6wyd/reports.xml

4

2 回答 2

1

所以我注意到您将地图对象存储为window['map'](有趣的是每个人似乎都这样做......当我不必深入研究源代码时使调试更容易:))。

我尝试使用一组已知的坐标自己设置中心:

map.setCenter(new google.maps.LatLng('51.0453246', '-114.0581012'));

这工作正常,所以实际的代码工作正常。我测试了一些情况下的值不正确......null并且0会把我放在海洋的某个地方,但undefined对于两者来说latlng都会把地图变成灰色。也许您传入的值不正确,最终变成undefined?

查看第二个alert,相关属性是latitudeand longitude,尽管您似乎在传递data['lat']and data['lng']。会是这个原因吗?

这应该解决它:

//update map
marker = new google.maps.Marker({
    position: new google.maps.LatLng(data['latitude'], data['longitude']),
    title:"Last Known Position"
});
marker.setMap(map);
map.setCenter(new google.maps.LatLng(data['latitude'], data['longitude']))
// google.maps.event.trigger(map, 'resize');

请注意,我注释掉了您的“调整大小”触发器(我假设您可能添加了该触发器以解决此问题?我记得在这里向其他用户建议过 :))。在您的情况下不需要。

于 2012-12-14T17:03:51.020 回答
0

好的,我刚刚发现了问题。它实际上是服务器端,我没有将响应标记为 JSON,因此 javascript 实际上正在接收一个字符串,我试图将它用作 JSON 对象。对于使用 Flask 的任何人,这里是执行此操作的代码: return Response(json.dumps(report), mimetype='text/json').

现在我真的不知道哪个答案可以标记为正确的答案(两者在技术上都是正确的,因为有两个不同的问题)

于 2012-12-14T17:28:41.730 回答