无法从XML变量加载Google Maps Markers

我搜遍了整个地方,并试图寻找其他问题的原因无济于事。 我有一个搜索表单来检索xml数据,数据恢复得很好。

响应标题

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)

响应:

 

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

TypeError:xml未定义[在此错误时出现错误]

var markers = 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 = "" + point + "hello 
"; 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 ''; while ($row = @mysql_fetch_assoc($result)){ echo ''; } echo ''; 

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

我在这里和谷歌做了大量的研究,我似乎无法在任何地方找到任何替代品。

你知道这个问题是什么吗?

谢谢

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

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

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

提供给success-callback的第一个参数不是(jq)XHR对象,而是数据(取决于请求,这可能是字符串,解析为对象的JSON字符串,或文档 )。

他们都没有属性responseXML

所以你可以直接使用这个文件:

 var xml = data; 

或使用第三个参数:

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

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