Как получить данные из обратного вызова getQSON JQuery - PullRequest
7 голосов
/ 11 сентября 2010

Мне нужно получить данные объекта 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 ]

3 голосов
/ 11 сентября 2010

Рич, на самом деле все гораздо проще, чем вы думаете (по крайней мере, так кажется).Я предполагаю, что у ваших маркеров есть 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:1, fields: {latitude: "..", longitude: ".." }}]
1 голос
/ 11 сентября 2010

Трудно помочь без более четкого представления о том, чего вы пытаетесь достичь, но похоже, что вы пытаетесь управлять большим количеством маркеров.

На самом деле уже существуют решения для этого.Взгляните на Обработка большого количества маркеров в Google Maps .

Менеджер маркеров Google находится в служебной библиотеке GMaps .Вы можете найти некоторые из описаний примеров полезными.

Менеджер маркеров представлен здесь , и на этой странице есть 2 примера, которые вы можете посмотреть: карта погоды и офисы Google .

Для получения дополнительной информации вы можете посмотреть документацию для Open Source Marker Manager .

Конечно, сначала вы должны получить простую карту, на которой отображается только один набор маркеров.Я думаю, что ответ Балуса поможет вам в этом.

1 голос
/ 11 сентября 2010

Вам нужно выполнить $.getJSON() (и другие вещи инициализации, которые зависят от наличия определенных элементов HTML в документе) во время window.onload, или более, путем jQuery, во время $(document).ready().В противном случае он действительно выполняется слишком рано, а именно сразу, когда веб-браузер получает код JS, задолго до завершения загрузки документа HTML.

$(document).ready(function() {
    $.getJSON("/entries/get_race_entries/1/demo/1", function(data) {
        // ...
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...