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

时间:2017-06-13 13:50:56

标签: javascript ajax google-maps google-maps-api-3

在我的页面中,我至少有3个 Ajax 调用,并且所有调用都会调用单独的函数,这些函数会在同一个Google地图上创建一些新标记

在脚本的顶部,我定义了initMap函数,该函数在全局map变量中创建基本地图。

但是现在,有时一切都有效,但有时它会在从至少一个ajax方法调用函数时显示以下错误。

InvalidValueError:setMap:不是Map的实例;而不是StreetViewPanorama的实例

我相信这可能是因为jQuery Ajax方法的异步特性。

为了解决这个问题,我尝试检查是否定义了 map ,只要在Ajax方法中有响应。所有这些都不会显示地图是未定义的。但仍有问题。

所以我甚至无法检查地图是否不存在,再次调用 initMap()。此外,我不能一次又一次地调用map,因为它将替换其他函数的所有标记。

这是帮助您理解的基本代码结构:

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浏览器中会出现更多问题。

有没有办法成功地做到这一点?

编辑:

我遇到了真正的问题。我的代码中的一切都很好。问题是Google地图加载了两次,默认情况下为1(PrestaShop),我正在添加一个。现在我可以使用默认加载的地图,但它显示缺少Google地图API密钥的错误。那么如何在不加载地图两次的情况下附加该密钥呢?

1 个答案:

答案 0 :(得分:0)

如果你的代码在下面,

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

试试这个。

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