我正在将google maps v2项目升级到v3。它到目前为止一直很顺利,但我遇到了一个我尚未找到解决方案的问题(虽然我确实有一个解决办法)。
地图访问者可以点击某个位置,拥有Lat& Long出现在infoWindow中,并能够将该数据保存到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()似乎已经处理了我称之为“storeMarker.php”而不是XML的文件。 storeMarker.php文件打开XML文件(并成功保存新标记)。此代码来自“使用PHP和Ajax开始谷歌地图应用程序”(Apress:Purvis,Sambells& Turner,2006),仅适用于v2。
GXmlHttp.create()不再适用于v3,我使用了一个简短的跨浏览器函数来打开Ajax请求(这里没有重现的功能):
var request = getAjaxObject();
现在JS在'request.responseXML'上窒息了。我试过'request.responseText',但是(不出所料)也不行。
我的问题是,我该怎么办?
正如我上面所说的,如果我删除超出'status == 200'检查的响应检查,并使用适当的v3语法,标记数据将被保存并正确显示临时标记。但它感觉不安全。
答案 0 :(得分:0)
我现在发现'storeMarker.php'文件应该有一个标题'header('Content-Type:text / xml');'。 (它在翻译中丢失了)。把它放回去让我进入剧本的下一行(!),但我希望我可以从这里解决问题。