我有一个使用谷歌地图api的网站(src =" https://maps.googleapis.com/maps/api/js?key = ...)。
问题是,当你登陆第二页时,你只看到谷歌地图框架,但没有地图。为了得到一个地图,我必须包含一个在第一次加载后执行的alert()函数,然后地图显示没有问题。 我对谷歌地图api有点新,我不明白这种行为。 谷歌地图的代码在js文件中,插入地图的html文件在另一个文件(.php)中。 所以问题是为什么我必须重新加载或使用警报(雅虎)'下面(我已注释掉)以便加载地图..以下是代码的样子:
function initialize_single_location() {
var currentdate = get_current_date();
$.getJSON(some code go here)
.done(function (data) {
for (i = 0; i < data.length; i++) {
if(some codes go here)
{
position_lat = data[i].lat;
position_long = data[i].long;
address=data[i].address;
city=data[i].city;
state=data[i].state;
zip=data[i].zip;
name=data[i].name;
$('#myAddress').html('<strong>'+data[i].name +'</strong><br>' + data[i].address + '<br>' + data[i].city + ' ' + data[i].state + ' '
+ data[i].zip + '<br>' +'Telephone: Not Provided' + '<br> Fax: Not Provided');
var direction = document.getElementById("directions");
direction.setAttribute("href", "https://www.google.com/maps/dir//"+address+"+"+city+"+"+state+"+"+zip+"");
}
}
})
.fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
alert("Request Failed: " + err);
});
//alert('yahoo');
var fenway = new google.maps.LatLng(position_lat, position_long);
var mapOptions = {
center: fenway,
zoom: 18,
mapTypeId: google.maps.MapTypeId.SATELLITE
};
var map = new google.maps.Map(
document.getElementById('map-canvas2'), mapOptions);
var panoramaOptions = {
position: fenway,
pov: {
heading: 34,
pitch: 10
}
};
var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'),panoramaOptions);
map.setStreetView(panorama);
}
google.maps.event.addDomListener(window, 'load', initialize_single_location);
答案 0 :(得分:0)
在addDomListener
中,调用一个功能,检查map-canvas
是否可见(直接在此页面/标签上登陆)。如果是这样,请初始化地图。我还添加了一个document.ready
检查,当从另一个页面/标签切换时调用可见性检查功能:
jQuery(document).ready(function ($) {
mapVisible();
});
function mapVisible() {
if (!$("#googft-mapCanvas").is(":visible")) return;
initialize_single_location();
}
//this will call it if you land directly on this page/tab
google.maps.event.addDomListener(window, 'load', mapVisible);
我们在jQuery选项卡中使用了此选项,切换到第二个选项卡不会重新启动window load
事件。这解决了这个问题。
答案 1 :(得分:0)
由于$getJSON()
调用的异步性质,您遇到了问题。它立即返回,之后开始初始化地图。变量fenway
很可能未定义,因此无法正确初始化map。这就是alert()
有帮助的原因。关闭警报窗口时,会设置$getJSON.done()
中的变量,之后一切正常。
您必须将地图初始化的所有代码移至.done()
$getJSON()
部分调用,或将其设为函数,并在.done()
部分结束时调用它。