我正在使用jquery ajax从解析xml文档的php脚本中获取一些结果。之后ajax调用我想显示来自谷歌api的地图,在该php脚本创建的div中( 这是我的问题 )。
是否可以在ajax调用后将地图API加载到php中创建的<div id="map-canvas">
?
PHP文件
... $xmlData = simplexml_load_file("using an http service");
echo "<div id='map-canvas'></div>"; //LOAD MAPP HERE!
echo "<ul>";
foreach($xmlData->StopTimes->StopTime as $stopTime){
echo "<li>",$stopTime->attributes()->Hour,"</li>";
}
echo "</ul>";
}
AJAX文件
...
//station click, show next stops
$('.station_link').click(function(){
var station_text = $(this).text();
$.ajax({ //make the ajax call
type: "POST", //use POST/GET
url: "../server_side/nextStop.php", //file to send data
data: {poststation : station_text}, //postlink -> php($_POST) value / text -> jquery var value
success: function(data){ //on success, do something
$('#next_stop').html(data);
$('#next_stop').show();
//Google maps API
function initialize() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
}
function loadScript() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize";
document.body.appendChild(script);
}
loadScript();
}
});
});
});
这就是我所尝试的(以及更多:p),但我甚至不知道它是否是错误的。
任何帮助或建议都将不胜感激!
- 更新 -
这很简单:
javascript文件
//station click, show next stops
$('.station_link').click(function(){
var station_text = $(this).text();
$.ajax({ //make the ajax call
type: "POST", //use POST/GET
url: "../server_side/nextStop.php", //file to send data
data: {poststation : station_text}, //postlink -> php($_POST) value / text -> jquery var value
success: function(data){ //on success, do something
$('#next_stop').html(data);
$('#next_stop').show();
// Google maps API
var mapOptions = {
center: new google.maps.LatLng(37.7831,-122.4039),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
});
});
});
只需将此<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
添加到HTML文件中即可。
这就是我所想要的,它正在加载<div id="map-canvas">
。
Ty无论如何都要寻求帮助! 对不起,如果我之前没有说明我的观点,我有点新手;)
答案 0 :(得分:4)
Google地图必须在您致电center: new google.maps.LatLng(-34.397, 150.644),
时加载,因此我认为您应该创建一个虚拟地图并在页面加载时对其进行初始化
<div id="dummy"></div>
<script type="text/javascript">
function initGoogle(){
myLatLng = new google.maps.LatLng(0,0);
var mapOptions = {
zoom: 1,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.HYBRID
};
map = new google.maps.Map(document.getElementById('dummy'), mapOptions);
}
$(document).ready(function(){
var script = document.createElement('script');
script.type = 'text/javascript';
script.id = 'googleMaps';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=initGoogle';
document.body.appendChild(script);
});
</script>
<style type="text/css">
#dummy { position: absolute; top: -5000px; left: -5000px; }
</style>
然后你可以绑定任何你想要的东西。
注意:我使用了jQuery&#39; $(document).ready()
,但是如果你不使用jQuery,你可以搞清楚。
答案 1 :(得分:1)
我怀疑你的initialize
没有因为范围问题而被调用,因为它只在Ajax回调的范围内定义,而不是地图SDK期望的全局范围。
如果您必须异步加载Google Maps JS,请使用jQuery.getScript(),然后在getScript
的回调中初始化您的地图。
虽然你可以有效地链接两个请求,但效果并不是特别好。
你可以:
0
getScript
异步并发地加载Maps SDK setTimeout
),检查你设置的变量的值,等到它等于2
,设置超时时间为再检查一次50ms左右答案 2 :(得分:-2)
您可以在AJAX调用后调用js函数。您可能最好在AJAX调用之外的某处定义gmaps初始化的功能,然后在成功调用php脚本之后调用gmap函数(在需要setTimeout('gmap()', 2000);
函数的情况下)。但是当我看到你的脚本时,它首先创建div,然后调用gmap的函数