2017-06-13 50 views
0

在我的頁面中,我至少有3個Ajax調用,它們都調用單獨的函數,在同一個Google地圖上創建一些新標記如何正確調用initMap來成功訪問地圖對象?

在腳本的頂部,我定義了initMap函數,該函數在全局變量map中創建基本映射。

但是現在,有時候一切正常,但有時它會顯示以下錯誤,當從至少一個ajax方法調用函數時。

InvalidValueError:setMap:不是Map的一個實例;而不是StreetViewPanorama的一個實例

我相信這可能是因爲jQuery Ajax方法的異步性質。

爲了解決這個問題,我試着檢查是否地圖被定義與否,每當Ajax方法響應。他們都不會像地圖一樣顯示未定義。但仍然存在問題。

所以我甚至不能檢查map是否存在,請再次調用initMap()。此外,我無法一次又一次地調用地圖,因爲它會替換其他函數的所有標記。

這裏的基本代碼結構,這將有助於你理解:

var map; 

function initMap(){ 
} 
initMap(); 

$.ajax({ 
//FUNCTION 1 IS CALLED HERE 
}); 


$.ajax({ 
//FUNCTION 2 IS CALLED HERE 
}); 


$.ajax({ 
//FUNCTION 3 IS CALLED HERE 
}); 

function Func1(){ 
} 

function Func2(){ 
} 

function Func3(){ 
} 

一個更重要的事情:這一問題已被觀察到更多的Chrome瀏覽器。

有什麼辦法可以成功地做到這一點嗎?

編輯:

我得到了真正的問題。我的代碼中一切都很好。問題是谷歌地圖加載了兩次,默認情況下是1(由PrestaShop)和我加入的一個。現在我可以使用默認加載的地圖,但它顯示Google地圖API密鑰丟失的錯誤。那麼如何在不加載地圖兩次的情況下追加該鍵?

回答

0

,如果你的代碼如下,

var marker= new google.maps.Marker({ 
    position: position, 
}); 

嘗試。

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

我得到了真正的問題。我的代碼中一切都很好。問題是Google地圖加載了兩次,默認情況下是1(PrestaShop),我添加了一個。現在我可以使用默認加載的地圖,但它顯示Google地圖API密鑰丟失的錯誤。那麼如何在不加載地圖兩次的情況下追加該鍵? –

+0

爲什麼Google地圖加載了兩次?如果你的googlemap加載腳本在下面,第一個源代碼「initMap();」是不必要的。 '

相關問題