downloadUrl函数不适用于使用opencart创建谷歌地图定位器

时间:2014-11-11 01:01:42

标签: javascript php jquery google-maps google-maps-markers

我正在使用opencart来开发http://www.goskitz.com.au/index.php?route=information/dealers

在dealers.php文件中有一个名为query()的函数,它将从数据库中搜索邮政编码以获取商店位置结果,并输出为XML格式。例如,如果我键入3000并选择墨尔本,则xml输出将为:

function query():

public function query(){
        // the query coding part is removed
        // Output to XML  
        $dom = new DOMDocument("1.0");
        $node = $dom->createElement("markers");
        $parnode = $dom->appendChild($node);

         header("Content-type: text/xml"); 
         // Iterate through the rows, adding XML nodes for each

         foreach($result as $key => $li){   
         // ADD TO XML DOCUMENT NODE
         $node = $dom->createElement("marker");
         $newnode = $parnode->appendChild($node);
         $newnode->setAttribute("name",$li['name']);
         $newnode->setAttribute("address", $li['address']);
         $newnode->setAttribute("lat", $li['lat']);
         $newnode->setAttribute("lng", $li['lng']);
         $newnode->setAttribute("distance", $li['distance']);
         }

         echo $dom->saveXML();
     }

}

输出

<markers><marker name="Harvey Norman BIG BUYS" address="Shop 9&amp;11 Ground Level Springvale Homemaker Centre 917 Princes Highway Springval VIC 3171" lat="-37.927456" lng="145.143845" distance="19.74128375361586"></marker>....blahblah... <markers>

然后我发现downloadurl功能无法正常工作,无论我输入什么网址,都没有任何反应。为什么会这样?

任何想法都会感激不尽。

我已在http://pastebin.com/yu0bX3vz

中粘贴了javascript

1 个答案:

答案 0 :(得分:0)

您在此处显示的代码片段负责生成XML。 生成的XML包含标记数据,需要将其解析并移交给Google Maps API,以便绘制标记。

您可能想要做的第一件事是,让一个标记工作,然后升级到多个标记。试着让XML正确,并在地图上绘制标记。 在尝试添加标记之前,必须初始化地图。

如果能解决问题,请继续通过jQuery动态加载标记XML。 因为你已经在使用jQuery,所以我建议删除downloadURL()函数,支持带有附加成功函数的简单jQuery Ajax .get()请求,用于解析incomming响应XML。

$(document).ready(function()
{
  $.ajax({
    type: "GET",
    url: "markers.xml", // xml source: either static xml file or xml generated by php
    dataType: "xml",
    success: parseXml // parse the marker xml
  });
});

// the idea is: from xml -> to var "location" -> addMarker(location)
function parseXml(xml)
{
  // foreach marker extract the xml data (lat,long,...)
  $(xml).find("marker").each(function(index){

     // and assign to a new location var
     var location.lat = $(this).find('lat').text();
     var location.long = $(this).find('long').text();
     var location.name = $(this).find('name').text();

     // then use this data to add the marker
     addMarker(location);
  )
}    

function addMarker(location)
{
    // the marker is a "point" on the map defined by it's lat/long
    var point = new google.maps.LatLng(location.lat, location.lng); 

    var marker = new google.maps.Marker({
       position:point,
       map: map,
       title: location.name
    }); 
};

如果你需要绑定一个信息窗口或其他东西,当点击标记图标时弹出, 那么请在本文https://developers.google.com/maps/articles/phpsqlajax_v3

中搜索bindInfoWindow()

我认为,这是你获得的这个downloadURL()函数的起源,但是在本教程中,他们不像你那样使用jQuery。

这个问题可能也有帮助:Loading XML via jQuery for Google Maps API V3