MySQL データベースからデータを取得する SELECT ステートメントを含む PHP ファイルがあります。次に、データを処理し、結果を XML ファイルに書き込みます。
XML ファイルを使用する JavaScript ファイルがあります。PHP ファイルがデータをダウンロードして XML ファイルを書き込んだ後で、doStuff() などの JavaScript 関数を呼び出すにはどうすればよいですか? setTimeout() の後に呼び出すこともできますが、もっと良い方法があることを願っています。
XML ファイルは、PHP スクリプトが実行されるたびに上書きされます。そのため、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() {}
このコードは機能しますが、PHP が新しい XML ファイルを書き込んだ後でのみこれらの JavaScript 関数を実行する必要があります。新しい XML ファイルが書き込まれた後、この JavaScript を呼び出すにはどうすればよいですか?
ありがとうございました。