无法从XML变量加载谷歌地图标记 [英] Cannot load Google Maps Markers from XML variable

查看:129
本文介绍了无法从XML变量加载谷歌地图标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经找遍了所有的地方,并试图找出问题的其他原因无济于事。 我有一个搜索表单来检索XML数据,并将数据回来太好了。

  

响应头

     

内容类型为text / xml;字符集= UTF-8日期星期五,04一月   2013 GMT 19时○○分52秒服务器Apache的传输编码分块通过1.1   decfpxy1(的NetCache的NetApp / 6.0.2)

     

响应:

 <标记><标记ID =1纬度=48.153938液化天然气=17.108459/>< /标记>
 

不过我数据变量没有插入任何物件,我的脚本加载的标记和我得到这个错误:

  

类型错误:XML是不确定的[打破这个错误]

     

VAR指标= xml.documentElement.getElementsByTagName(标记);

这是在code:

 功能送出数据(){




    。VAR FromDateUnformatted = $('#从')VAL()分裂('/');
    变种数fromdate = FromDateUnformatted [2] +' - '+ FromDateUnformatted [0] +' - '+ FromDateUnformatted [1] +'零时00分00秒';
    。VAR ToDateUnformatted = $(#为)VAL()分裂('/');
    变种TODATE = ToDateUnformatted [2] +' - '+ ToDateUnformatted [0] +' - '+ ToDateUnformatted [1] +'23时59分59秒';
    VAR MusicStyles = $(#乐)VAL()。
    VAR位置= $(#位置)VAL()。
    VAR FromPrice = $(#高考价)滑块(值,0);
    VAR ToPrice = $(#高考价)滑块(价值观,1);
    VAR IsOutdoors = + $('#IsOutdoors)是。(:选中);
    VAR HasPatio = + $('#HasPatio)是(:选中);


    $阿贾克斯({
        键入:POST,
        网址:MapSearchxml.php
        数据: {
            dataFromDate:没有fromdate,
            dataToDate:TODATE,
            dataMusicStyles:MusicStyles,
            dataLocations:位置,
            dataFromPrice:FromPrice,
            dataToPrice:ToPrice,
            dataIsOutdoors:IsOutdoors,
            dataHasPatio:HasPatio
        },
        beforeSend:功能(HTML){//出现这种情况的实际调用之前
            $(#结果)HTML('请稍候')。
            $(#SearchResult所)显示()。
            $(phpFromDate。)HTML(数fromdate)。
        },
        成功:功能(数据){
            // clearOverlays();
            VAR XML = data.responseXML;
            VAR的标记= xml.documentElement.getElementsByTagName(标记);

            对于(VAR I = 0; I< markers.length;我++){
                VAR名称=标记[I] .getAttribute(ID);
                VAR点=新google.maps.LatLng(
                parseFloat(标记物[I] .getAttribute(纬度)),parseFloat(标记物[I] .getAttribute(LNG)));

                VAR HTML =< B>中+点+< / B>你好< BR />中;
                VAR图标=新google.maps.MarkerImage(redmarker.png);

                VAR的标记=新google.maps.Marker({
                    地图:地图,
                    位置:点,
                    图标:icon.icon,
                    影子:icon.shadow
                });

                bindInfoWindow(标记,地图,信息窗口,HTML);
            }
        }
    });



    功能bindInfoWindow(标记,地图,信息窗口,HTML){
        google.maps.event.addListener(标记,'点击',函数(){
            infoWindow.setContent(HTML);
            infoWindow.open(地图,标记);
        });
    }

}
 

下面是PHP文件本身:

  $结果= mysql_query($查询);
如果(!$结果){
  模具(无效的问题:mysql_error());
}


标题(内容类型:文本/ XML);

回声'<标记>';

而($行= @mysql_fetch_assoc($结果)){
  回声'<标记;
  回声ID ='parseToXML($行['ID'])。'';
  回声'叻='parseToXML($行['LAT'])。'';
  回声'LNG ='parseToXML($行['LNG'])。'';
  回声/>';
}

回声'< /标记>';
 

我用这个code的变化来检索,没有任何问题,一个静态XML PHP文件,但这个code,我不能把从这篇文章的结果,并把它们插入到我的marker-建设者正常。

我在这里的研究和谷歌上进行吨,我似乎无法找到任何地方的任何替代品。

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

感谢

解决方案

您的地图变量是本地的onload功能,它不是在全球范围内提供,其中AJAX回调例程运行,所以它不是' T定义正确的时候,你在这里使用它:

  VAR指标=新google.maps.Marker({
                地图:地图,
                位置:点,
                图标:icon.icon,
                影子:icon.shadow
            });
 

为了使全球性的,做一个 VAR地图; 在全球范围内(任何函数之外),然后初始化它在你的onload功能(如你现在的样子,只是从前面的话)删除了变种。

I've searched all over the place and tried finding other causes of issues to no avail. I have a search form to retrieve xml data, and the data comes back great.

Response Headers

Content-Type text/xml;charset=utf-8 Date Fri, 04 Jan 2013 19:00:52 GMT Server Apache Transfer-Encoding chunked Via 1.1 decfpxy1 (NetCache NetApp/6.0.2)

Response:

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

However my data variable doesn't insert anything into my script that loads the markers and I get this error:

TypeError: xml is undefined [Break On This Error]

var markers = xml.documentElement.getElementsByTagName("marker");

This is the code:

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);
        });
    }

}

Here is the PHP file itself:

$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>';

I've used variations of this code to retrieve a static xml php file without any problems, but with this code, I am unable to take the results from this post and insert them into my marker-builder correctly.

I've done tons of research here and on google and I can't seem to find any alternatives anywhere.

Do you know what the issue could be?

Thanks

解决方案

Your "map" variable is local to the onload function, it isn't available in the global context in which the AJAX callback routine runs, so it isn't defined correctly when you use it here:

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

To make it global, do a var map; in the global context (outside any function), then initialize it in your onload function (as you are now, just remove the "var" from in front of it).

这篇关于无法从XML变量加载谷歌地图标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆