2016-09-19 111 views
0

我正在从阿贾克斯我的纬度和LAN值。这是我的示例代码。其实我从我的代码获取我的经纬度值。如果我直接将值传递给javascrip,它可以正常工作。如果我通过ajax使用它不工作。任何人都知道如何解决这个问题。我的谷歌地图回报“最大调用堆栈大小超过”错误

var locations=''; 
$.ajax({ 

     type: "POST", 
     url: 'http://www.ajax.com', 
     async: false, 
     success: function (msg) { 
      locations = msg[0]; 
/*below result is what i am getting from ajax */ 
      //locations=["<a href='#' target='_blank'><b class='blue'>XXX</b></a>", 53.2279753, -1.6115431, 1], ["<a href='#' target='_blank'><b class='blue'>YYY</b></a>", 51.9935422, -1.7021487, 2] 


     }, 
     error: function() { 

     } 
    }); 
locations = [locations]; 
     var map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 8, 
      center: new google.maps.LatLng(-39.92, 151.25), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }); 

     var infowindow = new google.maps.InfoWindow(); 

     var marker, i; 
     var markers = new Array(); 

     for (i = 0; i < locations.length; i++) { 
      marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
       map: map 
      }); 

      markers.push(marker); 

      google.maps.event.addListener(marker, 'click', (function (marker, i) { 
       return function() { 
        infowindow.setContent(locations[i][0]); 
        infowindow.open(map, marker); 
       } 
      })(marker, i)); 

     } 

     // Create a new viewpoint bound 
     var bounds = new google.maps.LatLngBounds(); 
     // Go through each... 
     $.each(markers, function (index, marker) { 
      bounds.extend(marker.position); 
     }); 
     // Fit these bounds to the map 
     map.fitBounds(bounds); 
     //AutoCenter(); 
+0

[当我使用谷歌地图超过最大调用堆栈大小](http:// stackoverflow .COM /问题/ 31866535 /未捕获-的RangeError - 最大呼叫堆栈大小超过-时,我使用的 - 谷歌 - 地图) –

+0

两件事情,第一也许尝试了'locations'对象的反序列化,第二行'位置:new google.maps.LatLng(locations [i] [1],locations [i] [2]),'可以将字符串传递到'LatLng()'函数,该函数指向我的第一个点,尝试转换通过JSON解析器将字符串转换为小数或浮点数。 –

回答

0

如果长/纬度未定义或不是数字,就会发生这种情况。您可能需要在创建标记之前检查它。

看到这里接受的答案:https://stackoverflow.com/a/17231733/1141089

更新:由于您的问题似乎是要传递字符串标记功能,您可以通过两种方式解决这个问题。

要么你解决它在JavaScript这样的:

var value = parseFloat("55.2421410"); 

或者在你的C#代码(这是返回JSON)是这样的:

var value = float.Parse("55.2421410", CultureInfo.InvariantCulture.NumberFormat); 

所以你的JavaScript代码看起来像这样(如果你选择用JS解决它)

var latitude = parseFloat(locations[i][1]) 
var longitude = parseFloat(locations[i][2]); 

//Do some error handling here, look for NaN, undefined etc. 

var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(latitude, longitude), 
    map: map 
}); 
+0

感谢您回复我的文章。其实JavaScript的把我的值转换成字符串,它是真正的problem.How可我避免这种 –

+0

您可以分析一个字符串转换为浮动是这样的:'VAR值= parseFloat(“55.2421410”);' 但它会更好,如果您从一开始就向您的Javascript发送了正确的类型(您的C#代码)。 – JOSEFtw