1

我使用Google Maps API在用戶輸入位置附近構建商店位置地圖。一切正常,但我在Internet Explorer中遇到了一個錯誤,我想擺脫它。錯誤在於「json.markers [i] .latitude爲空或不是對象」。下面的代碼:Google地圖和Internet Explorer Javascript/JSON問題

​​

而這裏的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 2012-02-15 15:31:20

+0

JSON對象中沒有額外的數組條目。感謝這個想法。 – 2012-02-15 15:46:22

+0

可以包含json嗎?即張貼在您的問題或創建一個http://jsfiddle.net – ManseUK 2012-02-15 15:53:16

回答

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. 谷歌地圖增加了一個 「Array.prototype.map()」 函數
  2. jQuery的。每()使用循環的 「的for..in」 的方法(有時至少,我認爲這取決於它是否循環的對象上)

大多數瀏覽器會忽略「Array.prototype.map()」循環時,即使有「的for..in」方法的功能,但Internet Explorer將嘗試在其上循環。這導致循環的最後一次迭代實際上處於「地圖」函數中,該函數沒有「緯度」屬性,因此IE會引發您的錯誤:「json.markers [i] .latitude is null or not an目的」。

上「的for..in」循環這裏更詳細的信息:Why is using "for...in" with array iteration a bad idea?

+0

這不完全是,但讓我找到正確的解決方案。很明顯,還有一個額外的數組對象,即使在控制檯打印輸出中也沒有顯示出來。我將循環運行到.length - 1,它工作。謝謝! – 2012-02-17 14:20:58