У меня есть страница с пользовательской картой Google, которая имеет около 100-150 маркеров.Данные маркера получаются путем анализа через внешний PHP XML-файла, представляющего собой список событий / проектов, но внутри каждого события есть соответствующие данные для создания маркера.
В настоящее время все работает, но этозагрузка карты занимает некоторое время, потому что анализ XML-файла занимает некоторое время.Чтобы ускорить процесс, я, по сути, хочу динамически загружать страницу, рисуя пустую карту при загрузке страницы, а затем запускать внешний PHP-файл для асинхронного анализа XML с помощью AJAX и добавлять маркеры на карту по мере их вывода из асинхронного режима.,Цикл PHP.
Что я не знаю, как это сделать, это выполнить эти эхо по мере их поступления.
Страница, на которой есть карта (explore.php), запускает JavaScript:
<script type="text/javascript">;
function init() {
// Draw the map (blank)
var map_focus = new google.maps.LatLng(35,-37);
var myOptions = { zoom: 2,center: map_focus,mapTypeId: google.maps.MapTypeId.ROADMAP };
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var xmlhttp = new XMLHttpRequest();
// Run PHP to parse XML, asynchronously
xmlhttp.open("GET","project_locations.php",true);
xmlhttp.send();
// This is where I want the JS/AJAX to execute echoes as they come from the above call to project_locations.php
eval(xmlhttp.responseText);
}
// Add marker to map. Markers would appear as fast as the XML is parsed
function addMarker(object, name, id) {
google.maps.event.addListener(object,"click", function() {
window.location = "showproject.php?id=" + id;
});
}
</script>
И это project_locations.php:
include('spparser.php'); // Parse XML
$i = 0;
foreach(SPParser::search($_REQUEST) as $index=>$sp) {
if ($sp["latitude"] != '' && $sp["longitude"] != '') {
echo "var marker" . $i . "= new google.maps.Marker({\n";
echo "position: new google.maps.LatLng(" . $sp["latitude"] . ", " . $sp["longitude"] . "),\n";
echo "map: map,\n";
echo "icon: 'http://www.google.com/intl/en_us/mapfiles/ms/micons/" . $sp["color"] . "-dot.png',\n";
echo "title: \"" . $sp["name"] . "\"\n";
echo "});\n\n";
echo "addMarker(marker" . $i . ", \"" . $sp["name"] . "\", " . $sp["id"] . ");\n";
$i++;
}
}
Приведенный выше код рисует пустую карту и все.Однако, если я запускаю его синхронно, используя:
xmlhttp.open("GET","project_locations.php",false);
Существует большая задержка, тогда карта и все маркеры отрисовываются, то есть оператор eval (), который следует после того, как send () выполнит всеотголоски в конце.Как мне выполнить их в режиме реального времени, поскольку они отражены в project_locations.php?