1
我有一個帶有大約100-150個標記的自定義Google Map的頁面。標記數據是通過外部PHP解析一個XML文件獲得的,該文件是一個事件/項目的列表,但是在每個事件中都是用於創建標記的適當數據。如何在發生時執行異步PHP回聲(JavaScript代碼)?
目前一切正常,但需要一段時間才能加載地圖,因爲解析XML文件需要一些時間。爲了加快速度,我基本上希望通過在加載頁面時繪製空白地圖來動態加載頁面,然後運行外部PHP文件以使用AJAX異步分析XML,並將標記添加到地圖中,因爲它們從異步中回顯出來。 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()語句)執行所有的回波最後。如何通過project_locations.php來實時執行它們?
我不太瞭解你的問題。上面的代碼片段是使用AJAX調用的文件嗎? – 2011-04-22 05:42:18
我剛剛添加了另一個片段,但是,第一個剪下的代碼將通過AJAX調用(不包括我評論的那3行代碼)。也許我應該重新編碼我知道如何去做,然後看看這裏有沒有人能幫我找到失蹤的一塊。 – Sooie 2011-04-22 05:48:31
@Sooie所以你想要的是在AJAX調用的片段中執行這些行?正確?如果是這種情況,請刪除
原因是當腳本執行完成時返回響應文本 以獲取數據作爲下載數據,因此您將響應文本作爲其下載獲取。
還要確保php不緩衝任何輸出。就像你的文件一樣。
來源
2011-04-22 07:54:15
由於PHP文件基本上是生成Javascript代碼,因此您可以將其作爲Javascript文件包含進來。
有了jQuery,你可以用
$.getScript('project_locations.php')
做到這一點。它應該是異步的。提示:當您從PHP生成JS變量時,請使用PHP函數json_encode
。來源
2011-04-22 08:09:42 Znarkus