我需要从回调函数中获取JSON对象数据,以便我可以在页面中稍后处理它,而不是像我现在那样在回调中处理它。对其他人来说一定是显而易见的,因为我看不到任何关于它的文章。谁能告诉我怎么做?
这是我的代码:
<script type="text/javascript" src="/site_media/js/jstree/_lib/jquery.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var myOptions = {
zoom: 4,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
return map;
}
function add_marker(map, lat, long) {
var marker_image='/site_media/images/map_marker.png';
var myLatlng = new google.maps.LatLng(lat,long);
title='title';
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:title,
icon:marker_image
});
//map.panTo(myLatlng);
}
//window.onload=initialize();
setTimeout('map=initialize();',2000);
$.getJSON("/ajax/get", function(data) {
$.each(data, function(i,val) {
latitude = val.fields.latitude;
longitude = val.fields.longitude;
add_marker(map, latitude, longitude);
});
});
</script>
<div id="map_canvas" style="width: 500px; height: 300px"></div>
答案 0 :(得分:3)
Rich,它实际上比你想象的要简单得多(至少看起来那样)。我假设您的标记有id
或其他东西。您可能需要根据需要调整此项:
var lastMarkerId; // We'll store the id here, starts as undefined
function refresh_markers () {
$.getJSON("/ajax/get", { marker_id: lastMarkerId }, function(data) {
$.each(data, function(i,val) {
latitude = val.fields.latitude;
longitude = val.fields.longitude;
add_marker(map, latitude, longitude);
});
if (data.length) {
// grab the last item and store its ID
lastMarkerId = data.pop().id;
}
});
}
然后在您的服务器上执行以下操作:“如果marker_id
有值,请在该ID后找到每个标记,否则,将它们全部返回”。
记住!每个标记都需要一个id才能使我的代码工作:
[{id:1, fields: {latitude: "..", longitude: ".." }}]
答案 1 :(得分:1)
您需要在$.getJSON()
期间执行window.onload
(以及其他依赖于文档中某些HTML元素存在的初始化内容),或者在$(document).ready()
期间执行更多jQuery方式。否则它确实执行得太早,即webbrowser在HTML文档加载完成之前立即检索JS代码。
$(document).ready(function() {
$.getJSON("/entries/get_race_entries/1/demo/1", function(data) {
// ...
});
});
答案 2 :(得分:1)
如果没有更清楚地了解你想要实现的目标,很难提供帮助,但听起来你正试图管理大量的标记。
实际上已有解决方案。看看 Handling Large Amounts of Markers in Google Maps 。
Google标记管理器位于 GMaps Utility Library 中。您可能会发现一些有用的 descriptions of examples 。
标记管理器 introduced here ,您可以在该页面上看到2个示例: a weather map 和 Google offices 强>
有关详细信息,请查看 documentation for the Open Source Marker Manager 。
当然,你首先应该得到一个简单的地图,只有一组标记显示并运行。我认为Balus的回答可以帮助你。