如何正确调用initMap来成功访问地图对象?

问题描述:

在我的页面中,我至少有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密钥丢失的错误。那么如何在不加载地图两次的情况下追加该键?

,如果你的代码如下,

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();”是不必要的。 '