如何从JQuery getJSON回调中获取数据

时间:2010-09-11 03:34:01

标签: ajax json jquery

我需要从回调函数中获取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>

3 个答案:

答案 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的回答可以帮助你。