Google マップ v2 プロジェクトを v3 にアップグレードしています。これまでのところうまくいっていますが、まだ解決策を見つけることができていない問題に遭遇しました (回避策はありますが)。
マップへの訪問者は、場所をクリックして、緯度と経度を情報ウィンドウに表示し、そのデータを XML ファイルに保存できます。v2でこれが正常に機能しました。
v3 でも動作しますが、危険と思われる Ajax チェックをすべて削除した場合に限ります。v2 で私が持っていた:
var request = GXmlHttp.create();
// open the request to storeMarker.php on server
request.open('GET', 'storeMarker.php' + getVars, true);
request.onreadystatechange = function() {
if (request.readyState == 4) {
// the request is complete
var xmlDoc = request.responseXML;
// retrieve the root document element (response)
var responseNode = xmlDoc.documentElement;
// retrieve the type attribute of the node
var type = responseNode.getAttribute("type");
// retrieve the content ofthe responseNode
var content = responseNode.firstChild.nodeValue;
//check to see if it was an error, or success
if (type != 'success') {
alert(content);
} else {
// create a new marker and add its info window
var latlng = new GLatLng(parseFloat(lat), parseFloat(lng));
var marker = makeTempMarker(latlng, content, bus);
map.addOverlay(marker);
map.closeInfoWindow();
}
}
どういうわけか、GXmlHttp.create() は、XML ではなく「storeMarker.php」と呼んでいるファイルに対処したようです。storeMarker.php ファイルは XML ファイルを開きます (新しいマーカーを正常に保存します)。このコードは、「Beginning Google Maps Applications with PHP and Ajax」(Apress: Purvis, Sambells & Turner, 2006) から派生したもので、v2 にのみ適用されます。
GXmlHttp.create() は v3 では使用できなくなりました。代わりに、Ajax リクエストを開く短いクロスブラウザー関数を使用しました (関数はここでは再現されていません)。
var request = getAjaxObject();
これで、JS は「request.responseXML」でチョークします。「request.responseText」を試しましたが、(当然のことながら)それも機能しません。
私の質問は、代わりに何をすればよいですか?
上で述べたように、「status == 200」チェックを超えて応答チェックを削除し、適切な v3 構文を使用すると、マーカー データが保存され、一時的なマーカーが適切に表示されます。しかし、それは「安全」ではありません。