Переполнение callstack в JSON .each - PullRequest
1 голос
/ 27 сентября 2011

У меня есть список объектов JSON, которые я перебираю и затем (используя найденный плагин jQuery Gmap здесь ) создаю маркеры для этого объекта и добавляю его на карту.

Проблемав каждом браузере я получаю сообщения о переполнении стека вызовов:

Uncaught RangeError: Максимальный размер стека вызовов превышает

в Chrome и

Слишком много рекурсии

в Firefox.

Я понятия не имею, почему или как это исправить.

Это мой код:

$('#map_canvas').gmap().bind('init', function (evt, map) {
        var webMethod = '<%= NavigationHelper.GetFullUrl("Components/Services/storelocatorservice.asmx/GetStoresByAddress") %>';
        var webParam = '{ "address": "Vaartkom 31/9 3000 Leuven", "language": "<%= Sitecore.Context.Language.CultureInfo.TwoLetterISOLanguageName %>", "radius": "15" }';

        $.ajax({
            type: "POST",
            url: webMethod,
            data: webParam,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                //$('#map_canvas').gmap('set', 'MarkerClusterer', new MarkerClusterer(map));
                addMarkers($.parseJSON(msg.d));
            }
        });
});

function addMarkers(json) {
        $.each(json, function (i, m) {
            $('#map_canvas').gmap('addMarker', {
                'title': m.Name,
                'position': new google.maps.LatLng(m.Lat, m.Long),
                'name': m.Name,
                'zipcode': m.ZipCode,
                'id': m.LocationId,
                'bounds': true
            }).click(function () {
                $('#map_canvas').gmap('openInfoWindow', {
                    'content': '<h3>' + m.Name + '</h3><p>' + m.ZipCode + '</p><a onclick="getDirections(\'' + m.Id + '\')">Route</a>'
                }, this);
            });
        });
}

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 28 сентября 2011

Я нашел исправление, но не то, что оно исправляет саму ошибку, а просто предотвращает ее возникновение: я должен установить границы: false при добавлении маркера, и тогда он не будет переполнять стек вызовов.

...