Загрузите карты google в div, загруженные ajax

Я использую jquery ajax, чтобы получить некоторые результаты из php-скрипта, который анализирует XML-документ. После этого ajax-вызова я хочу показать карту из google api, в div, созданном этим скриптом php ( это моя проблема ).

Можно ли загрузить API карт в <div id="map-canvas"> который создается в php, после вызова ajax?

PHP FILE

  ... $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 FILE

 ... //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"> как и должно.

Ты за помощь! Извините, если раньше я не пробовал мой вопрос, я немного новичок;)

Карты 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> 

то вы можете привязать все, что хотите.


Примечание. Я использовал $(document).ready() jQuery $(document).ready() , но если вы не используете jQuery, вы можете понять это.

Я подозреваю, что ваша initialize не вызвана из-за проблем с областью, поскольку она определяется только в области обратного вызова Ajax, а не глобальной области, которую ожидает SDK Maps.

Если вам необходимо загружать JSKERY.getScript (), а затем инициализировать карту в getScript .

Это может быть лучше, поскольку вы эффективно связываете два запроса, что не особенно эффективно.

Ты мог:

  • Создать глобальную переменную, установленную в 0
  • Погиб вызов Ajax для DivX карт
  • Использовать getScript для загрузки SDK карт асинхронно и одновременно
  • В функции обратного вызова ваших вызовов Ajax и getScript увеличивайте глобальную переменную, которую вы только что установили
  • Имейте цикл, который запускается каждые 50 мс или около того (рекурсивный вызов setTimeout , например), проверяя значение переменной, которую вы установили, до тех пор, пока она не станет равной 2 , установите тайм-аут еще на 50 мс или около того, чтобы снова проверить
  • Как только условие выше будет выполнено, инициализируйте свою карту, как вы знаете, что оба API-интерфейса div и maps загружены

Вы можете вызвать функцию js после вызова AJAX. Вероятно, вам лучше определить функцию инициализации gmaps где-то вне вызова AJAX, а затем после успешного вызова вашего php-скрипта вы вызовите функцию gmap (в случае высокой потребности в setTimeout('gmap()', 2000); function). Но когда я вижу ваш скрипт, он сначала создает div, а затем вызывает функцию gmap