1

Google지도 API를 사용하여 사용자 입력 위치 근처에 상점 위치의지도를 만듭니다. 모든 것이 작동하지만 Internet Explorer에서 오류가 발생했습니다. 제거하고 싶습니다. 오류는 "json.markers [i] .latitude가 null이거나 객체가 아닙니다."입니다. 여기에 코드입니다 :Google지도 및 Internet Explorer Javascript/JSON 문제

function buildGoogMapView(mrkrs,json) 
{ 
var marker=centerLatitude=centerLongitude=startZoom=point=map=""; 

mrkrs.each(json.gdrcenter, function(i) { 
    centerLatitude = json.gdrcenter[i].latitude; 
    centerLongitude = json.gdrcenter[i].longitude; 
}); 

mrkrs.each(json.gdrzoom, function(i) { 
    startZoom = json.gdrzoom[i].setting; 
}); 

startZoom = Number(startZoom); 

map = new GMap2(document.getElementById("mapGOOG_PlaceHolder")); 
map.addControl(new GLargeMapControl()); 
map.addControl(new GMapTypeControl()); 
map.setCenter(new GLatLng(centerLatitude, centerLongitude),startZoom); 

mrkrs.each(json.markers, function(i) { 
    point = new GLatLng(json.markers[i].latitude,json.markers[i].longitude); 
    marker = createMarker(point,json.markers[i].description); 
    map.addOverlay(marker); 
});} 

그리고 여기에 요청에 따라 JSON 객체가, (나는 비밀을 목적으로 일부 값을 변경했습니다)이다 : 나는 다른 어떤에서이 오류를받지 못했습니다

{"gdrzoom":[ 
{"setting":"7"}], 
"gdrcenter":[ 
{"latitude":"35.5", 
"longitude":"-79.6"}], 
"markers":[ 
{"latitude":"35.0", 
"longitude":"-78.9", 
"name":"Store", 
"description":"DESCVALUE"}, 
{"latitude":"36.0", 
"longitude":"-79.8", 
"name":"Store", 
"description":"DESCVALUE"}, 
{"latitude":"35.5", 
"longitude":"-80.8", 
"name":"Store", 
"description":"DESCVALUE"}]} 

브라우저, json 객체에 올바른 정보가 들어 있다는 것을 알고 있습니다. 또한 스크립트를 페이지 끝으로 이동하여 단순한 스크립트가 아닌지 확인했습니다 (그렇지 않은 경우).

아이디어가 있으십니까? 이 변경

+0

는 http://jsonlint.com/를 사용하여 JSON을 확인 IE는 쉼표가 싫어! – ManseUK

+0

JSON 개체에 추가 배열 항목이 없습니다. 아이디어를 가져 주셔서 감사합니다. –

+0

json을 포함 할 수 있습니까? 즉 질문에 게시하거나 http://jsfiddle.net – ManseUK

답변

1

시도 : 여기에

mrkrs.each(json.markers, function(i) { 
    point = new GLatLng(json.markers[i].latitude,json.markers[i].longitude); 
    marker = createMarker(point,json.markers[i].description); 
    map.addOverlay(marker); 
});} 

:

for (var i = 0; i < json.markers.length; i++) { 
    point = new GLatLng(json.markers[i].latitude,json.markers[i].longitude); 
    marker = createMarker(point,json.markers[i].description); 
    map.addOverlay(marker); 
} 

그 오류를 제거하는 경우는, 다음 설명을 읽어.

이 두 가지 문제가 복합 것 :

  1. Google지도 추가하는 "Array.prototype.map()"기능
  2. jQuery의 .each()는 때때로 반복의 "for..in을"방법을 (사용 적어도 객체를 루핑하는 경우에 따라 다릅니다)

대부분의 브라우저는 "for..in"메소드를 사용하여 루핑 할 때 "Array.prototype.map()"함수를 무시하지만 Internet Explorer에서 루프를 반복합니다. 이로 인해 루프의 마지막 반복이 "위도"속성이없는 "지도"함수에 실제로있게되므로 IE에서 오류가 발생합니다. "json.markers [i] .latitude가 null이거나 그렇지 않습니다. 목적". "for..in을"여기 루핑에

더 자세한 정보를 원하시면 : - 나는 그것의 끝에 추가 쉼표가 의심 .... Why is using "for...in" with array iteration a bad idea?

+0

이것은 꽤 아니었지만 올바른 해결책을 찾았습니다. 분명히 콘솔 출력에도 표시되지 않는 추가 배열 객체가있었습니다. 나는 루프를 .length - 1로 돌렸고 효과가 있었다. 감사! –