У меня есть PHP-файл с оператором SELECT, который извлекает данные из базы данных MySQL. Затем он обрабатывает данные и записывает результаты в файл XML.
У меня есть файл JavaScript, который использует файл XML. Как вызвать функцию javascript, например, doStuff (), после того, как файл PHP загрузил данные и записал файл XML? Я мог бы назвать это после setTimeout (), но я надеюсь, что есть лучший способ.
XML-файл перезаписывается при каждом запуске PHP-скрипта. Таким образом, файл XML может уже существовать.
Есть ли какое-нибудь событие, после которого я мог бы запустить doStuff ()? Или способ определить, закончился ли скрипт PHP?
Есть предложения?
Спасибо.
UPDATE:
Вот еще несколько подробностей о том, что у меня есть.
У меня есть карта с формой. Когда пользователи отправляют форму, я использую Ajax для обработки формы. Вызывается функция PHP и выбираются данные из базы данных MySQL. Данные включают широту и долготу. Затем PHP-файл записывает XML-файл с этими данными. Затем файл javascript читает файл XML и размещает маркеры на карте.
PHP и JavaScript работают нормально. Проблема в том, что файл javascript запускается сразу же, как только загружается карта. Таким образом, данные в XML-файле (из предыдущего выбора формы) превращаются в маркеры. Если я удаляю XML-файл, то на карту не ставятся маркеры. JavaScript пытался использовать несуществующий XML-файл, как только он загружается. Его там нет, поэтому на карте нет маркеров. И это до того, как пользователь сделал какие-либо выборы в форме.
Мне нужен какой-то способ, чтобы функция javascript, загружающая файл XML, делала это только после того, как файл 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. Как я могу вызвать этот javascript после того, как новый XML-файл был написан?
Спасибо.