我有一个 JSON 对象列表,我循环遍历它,然后(使用找到的 jQuery Gmap 插件 here )为该对象创建标记并将其添加到 map 中。
问题是在每个浏览器中我都会收到调用堆栈溢出消息:
Uncaught RangeError: Maximum call stack size exceede
在 Chrome 中,以及
Too much recursion
在火狐浏览器中。
我不知道为什么或如何解决它。
这是我的代码:
$('#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);
});
});
}
非常感谢任何帮助!
最佳答案
我找到了一个修复程序,并不是修复了错误本身,而是阻止了错误的发生: 添加标记时我必须设置bounds: false,这样它就不会溢出调用堆栈。
关于javascript - JSON .each 上的调用堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569813/