2015-07-20 100 views
-2

我目前正在使用Google Maps API開發Web應用程序。我想同時將X條不同的路線繪製到相同的目的地。JavaScript中的TypeError,Google Maps API

如果我繪製一個,它的工作原理,但是當我使用數組(因爲我不知道最終將繪製多少路線),它向我顯示了這種類型的錯誤。計算路線時的代碼就像這樣。

var rendererOptions = []; 
var directionsDisplay = []; 

for (var k = 0; k < carLatLng.length; k++) { 

    rendererOptions[k] = { 
     map: map 
    }; 
    directionsDisplay[k] = new google.maps.DirectionsRenderer(rendererOptions[k]); 

    var request = { 
     origin: carLatLng[k], 
     destination: place.geometry.location, 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
    }; 

    directionsService = new google.maps.DirectionsService(); 
    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay[k].setDirections(response); 

     } else alert('Failed to get directions'); 
    }); 

} 

錯誤告訴我TypeError: directionsDisplay[k] is undefined。 (它指if()條款裏面的那個)

希望你能幫助我。我嘗試了一些選項,但沒有一個可行。只有工作的時候我消除了環路(和陣列式)

謝謝

+1

這可能是因爲'k'不在您的'directionsService.route'函數中定義。 – putvande

+1

'k'絕對不是未定義的--'display [k]'未定義 –

+0

謝謝大家。但也許我不配得分那麼多... –

回答

2

directionsService.route是異步 - 由接收到最後repsonse時,循環會一直運行的過程中,和k == carLatLng.length - 因此directionsDisplay[k]將不確定

你需要的是改變

directionsService.route(request, function (response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay[k].setDirections(response); 

    } else alert('Failed to get directions'); 
}); 

喜歡的東西

function(directionsDisplay) { 
    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 
     } else alert('Failed to get directions'); 
    }); 
}(directionsDisplay[k]); 

有可能更容易的方式,使一個封閉的,但我的心在那一刻腐壞

編輯:一些清晰度,也許有希望 -

function(captured_k) { 
    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay[captured_k].setDirections(response); 
     } else alert('Failed to get directions'); 
    }); 
}(k); 
+0

謝謝。雖然我不太明白爲什麼這項工作(我理解問題是什麼,爲什麼我的代碼不工作),但我不明白你的解決方案如何解決異步問題......對我來說,你的代碼是和我的一樣。無論如何,非常感謝你。 –

+1

這是因爲循環中有一個異步函數 - k的值繼續上升,而異步函數正在等待完成,到最後一個異步函數完成時,k肯定會保證太大。使用閉包,'捕捉'在IIFE中的k值(谷歌它),實際上,我'捕捉'方向顯示[k]對象,但它是相同的東西 –