我有一个 PHP 文件,其中包含一个从 MySQL 数据库中提取数据的 SELECT 语句。然后它处理数据并将结果写入 XML 文件。
我有一个使用 XML 文件的 javascript 文件。在 PHP 文件下载数据并写入 XML 文件后,如何调用 javascript 函数,例如 doStuff()?我可以在 setTimeout() 之后调用它,但我希望有更好的方法。
每次 PHP 脚本运行时,XML 文件都会被覆盖。因此,XML 文件可能已经存在。
是否有一些事件可以让 doStuff() 触发?还是一种确定 PHP 脚本是否完成的方法?
有什么建议么?
谢谢你。
更新:
这里有一些关于我所拥有的更多细节。
我有一张带表格的地图。当用户提交表单时,我使用 Ajax 来处理表单。调用 PHP 函数并选择 MySQL 数据库中的数据。数据包括纬度和经度。然后 PHP 文件用这些数据写入一个 XML 文件。然后,javascript 文件读取 XML 文件并在地图上放置标记。
PHP 和 javascript 工作正常。问题是,一旦地图加载,javascript 文件就会立即触发。因此,xml 文件中的数据(来自先前的表单选择)变成了标记。如果我删除 xml 文件,则地图上不会放置任何标记。javascript 尝试在加载后立即使用不存在的 xml 文件。它不存在,因此地图上没有放置任何标记。这是在用户在表单中做出任何选择之前。
我需要一些方法来让加载 XML 文件的 javascript 函数只有在 XML 文件被写入之后才会这样做。
我正在关注本教程。我必须对其进行调整才能使其在 WordPress 插件中工作。
在我的 PHP 中,我有:
//Creates XML
//each marker has a lat and long
$my_xml ='<?xml version="1.0" ?>';
$my_xml .= '<markers>';
foreach($csf_data as $incident) {
$my_xml .='<marker lat="'. $incident->latitude.'" lng="'.$incident->longitude.'" type="resto" />';
}
$my_xml .= '</markers>';
//Creates the XML file
//(I've hardcoded markers.xml's path for now-- will change later)
$file_handle = fopen('/Users/myname/Sites/mysite/wp-content/plugins/myplugin/markers.xml', 'w');
fwrite($file_handle, $my_xml);
fclose($file_handle);
在javascript中,我有:
function downloadUrl(url,callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
var customIcons = {
resto: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
},
bar: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
}
};
downloadUrl("http://mysite/wp-content/plugins/myplugin/markers.xml", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var icon = customIcons[type];
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
}});
function doNothing() {}
此代码有效,但我需要这些 javascript 函数仅在 PHP 编写新的 XML 文件后运行。编写新的 XML 文件后如何调用此 javascript?
谢谢你。