【问题标题】:Cannot load Google Maps Markers from XML variable无法从 XML 变量加载 Google 地图标记
【发布时间】:2012-12-19 06:07:03
【问题描述】:

我到处搜索并尝试寻找其他问题的原因,但无济于事。 我有一个用于检索 xml 数据的搜索表单,并且返回的数据很好。

响应标头

Content-Type text/xml;charset=utf-8 日期 周五,1 月 4 日 2013 19:00:52 GMT 服务器 Apache 传输编码通过 1.1 分块 decfpxy1 (NetCache NetApp/6.0.2)

回复:

<markers><marker id="1" lat="48.153938" lng="17.108459" /></markers>

但是我的 data 变量没有在我的脚本中插入任何加载标记的内容,我得到了这个错误:

TypeError: xml is undefined [Break On This Error]

var 标记 = xml.documentElement.getElementsByTagName("marker");

这是代码:

function SendData() {




    var FromDateUnformatted = $('#from').val().split('/');
    var FromDate = FromDateUnformatted[2] + '-' + FromDateUnformatted[0] + '-' + FromDateUnformatted[1] + ' 00:00:00';
    var ToDateUnformatted = $("#to").val().split('/');
    var ToDate = ToDateUnformatted[2] + '-' + ToDateUnformatted[0] + '-' + ToDateUnformatted[1] + ' 23:59:59';
    var MusicStyles = $("#music").val();
    var Locations = $("#locations").val();
    var FromPrice = $("#entrance-price").slider("values", 0);
    var ToPrice = $("#entrance-price").slider("values", 1);
    var IsOutdoors = +$('#IsOutdoors').is(':checked');
    var HasPatio = +$('#HasPatio').is(':checked');


    $.ajax({
        type: "POST",
        url: "MapSearchxml.php",
        data: {
            dataFromDate: FromDate,
            dataToDate: ToDate,
            dataMusicStyles: MusicStyles,
            dataLocations: Locations,
            dataFromPrice: FromPrice,
            dataToPrice: ToPrice,
            dataIsOutdoors: IsOutdoors,
            dataHasPatio: HasPatio
        },
        beforeSend: function (html) { // this happens before actual call
            $("#results").html('Please Wait');
            $("#searchresults").show();
            $(".phpFromDate").html(FromDate);
        },
        success: function (data) {
            //clearOverlays();
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");

            for (var i = 0; i < markers.length; i++) {
                var name = markers[i].getAttribute("id");
                var point = new google.maps.LatLng(
                parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));

                var html = "<b>" + point + "</b>hello <br/>";
                var icon = new google.maps.MarkerImage("redmarker.png");

                var marker = new google.maps.Marker({
                    map: map,
                    position: point,
                    icon: icon.icon,
                    shadow: icon.shadow
                });

                bindInfoWindow(marker, map, infoWindow, html);
            }
        }
    });



    function bindInfoWindow(marker, map, infoWindow, html) {
        google.maps.event.addListener(marker, 'click', function () {
            infoWindow.setContent(html);
            infoWindow.open(map, marker);
        });
    }

}

这是 PHP 文件本身:

$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}


header("Content-type: text/xml");

echo '<markers>';

while ($row = @mysql_fetch_assoc($result)){
  echo '<marker ';
  echo 'id="' . parseToXML($row['ID']) . '" ';
  echo 'lat="' . parseToXML($row['LAT']) . '" ';
  echo 'lng="' . parseToXML($row['LNG']) . '" ';
  echo '/>';
}

echo '</markers>';

我已使用此代码的变体来检索静态 xml php 文件而没有任何问题,但使用此代码,我无法从这篇文章中获取结果并将它们正确插入到我的标记生成器中。

我在这里和谷歌上进行了大量研究,但似乎在任何地方都找不到任何替代方案。

你知道问题可能是什么吗?

谢谢

【问题讨论】:

  • 您是否尝试将浏览器指向动态生成的 XML?它有效吗?从your previous question 的答案来看,您似乎想使用:var xml = data,而不是 data.responseXML。
  • 嘿 geocodezip,everything looks good.
  • 这对我来说看起来不正确:&lt;markers&gt;&lt;marker id="" lat="" lng="" /&gt;&lt;/markers&gt;。可能是有效的 XML,但不会显示标记。实际查询是否返回数据?您的代码是否正确处理了这种情况?
  • 我也被它弄糊涂了,因为我的查询是这样写的if(mysql_num_rows($result) &gt; 0),但是you can go here,将from 日期设置为1 月3 日并点击地图搜索。我现在有一个新错误,但是您可以在 Firebug 中看到帖子结果。

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


【解决方案1】:

提供给成功回调的第一个参数不是 (jq)XHR 对象,而是数据(取决于请求,这可能是字符串、解析为对象的 JSON 字符串或 文件)。

他们都不会有responseXML的属性。

所以你可以直接使用文档:

var xml = data;

或使用第三个参数:

success: function (data,status,jqXHR) {
         var xml = jqXHR.responseXML;
         //....
         }

但是无论你做什么,你最好为请求指定dataType:'xml',以确保成功的结果将是一个 xml-document 。

【讨论】:

  • 谢谢,但是我认为这将永远无法解决:D! Here's how I formatted the script now。现在的错误是从谷歌自动加载的 main.js 中的 Error: Invalid value for property &lt;map&gt;: [object HTMLDivElement]。我会尝试自己找出更多关于错误的信息。
  • 错误表示您将 DIV 元素分配给对象的地图属性(但它必须是 google.maps.Map-object)。没有看到完整的脚本是不可能帮助你的
  • 听起来像 IE。您是否使用“var”关键字声明您的 google.maps.Map 对象?它是否与包含它的 HTML div 的 id 同名?要修复这个错误,我们需要查看地图的定义。
  • 当然,你可以看到whole script here。地图功能从底部开始,顶部与地图无关。
  • MapSearchxml.php 总是返回&lt;markers&gt; &lt;marker id="" lat="" lng=""/&gt; &lt;/markers&gt;
【解决方案2】:

您的“map”变量是 onload 函数的本地变量,它在运行 AJAX 回调例程的全局上下文中不可用,因此在此处使用它时定义不正确:

                var marker = new google.maps.Marker({
                map: map,
                position: point,
                icon: icon.icon,
                shadow: icon.shadow
            });

要使其全局化,请在全局上下文中(在任何函数之外)执行 var map;,然后在您的 onload 函数中对其进行初始化(就像现在一样,只需从它前面删除“var”)。

【讨论】:

  • 哇,我快到了!你知道我为什么会收到ReferenceError: infoWindow is not defined 错误吗?我以为我什么都有了,但谷歌没有答案。
  • 错误:ReferenceError: infoWindow is not defined 通常在未定义 infoWindow 变量时发生(提示:未定义)。你需要定义它并在某个地方初始化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2011-09-27
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多