Google映射Ajax调用:v2和v3之间的差异

时间:2013-11-01 00:31:53

标签: php ajax google-maps-api-3

我正在将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语法,标记数据将被保存并正确显示临时标记。但它感觉不安全。

1 个答案:

答案 0 :(得分:0)

我现在发现'storeMarker.php'文件应该有一个标题'header('Content-Type:text / xml');'。 (它在翻译中丢失了)。把它放回去让我进入剧本的下一行(!),但我希望我可以从这里解决问题。