帮助阵列和谷歌地图API

问题描述:

我有我从教程使用其中谷歌地图API函数的位置标记在这里找到:Google Maps API with JQuery帮助阵列和谷歌地图API

以任何方式,我不得不修改JavaScript来占我的应用。我像之前一样从XML文件中提取标记,但这次我收到了多个请求,以及多个标准差,服务时间和这些请求的方法。我已经设置了XML,使其具有附加到标签的计数器,但它看起来不是正确地呈现到数组中。

请注意,我从来没有使用过Javascript,而且大部分时间都是在我的裤子上飞行,所以如果它是Javascript的暴行,请随时告诉我,XML的整个版本都在蟒蛇。 (我很抱歉,我不知道如何在堆栈溢出时显示<或>而不会将它简单地隐藏为标签。在每个“标记”“标记”“名称”“requestX”周围, “timetoserveX” 等是<和>在XML标记。

标记
标记
名Simpletown,CA /名称
request0 /资源//request0
timetoserve0 0.001秒服务请求/ timetoserve0
mean0 0.5309平均以秒/ mean0
std_dev0 0.552(秒)标准偏差/ std_dev0
request1 /资源2// request1
timetoserve1 0.015626秒以服务请求/ timetoserve1
mean1 0.0011平均以秒/ mean1
std_dev1在秒0.004465标准偏差/ std_dev1
/标记
/标记

MYMAP.placeMarkers = function(filename) { 
$.get(filename, function(xml){ 
    $(xml).find("marker").each(function(){ 
     var name = $(this).find('name').text(); 
     var count = 0; 
     var requeststring = 'request' + Integer.toString(count) 
     var request = new Array(); 
     var timetoserve = new Array(); 
     var mean = new Array(); 
     var std_dev = new Array(); 
     var timetoservestring = 'timetoserve' + Integer.toString(count); 
      var meanstring = 'mean' + Integer.toString(count); 
     var std_devstring = 'std_dev' + Integer.toString(count); 
     while ($(this).find(requeststring).text()){ 
      timetoservestring = 'timetoserve' + Integer.toString(count); 
      meanstring = 'mean' + Integer.toString(count); 
      std_devstring = 'std_dev' + Integer.toString(count); 
      request[count] = $(this).find(requeststring).text(); 
      timetoserve[count] = $(this).find(timetoservestring).text(); 
      mean[count] = $(this).find(meanstring).text(); 
      std_dev[count] = $(this).find(std_devstring).text(); 
      count++; 
      requeststring = 'request' + Integer.toString(count) 
     } 
     // create a new LatLng point for the marker 
     var lat = $(this).find('lat').text(); 
     var lng = $(this).find('lng').text(); 
     var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng)); 

     // extend the bounds to include the new point 
     MYMAP.bounds.extend(point); 

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

     var infoWindow = new google.maps.InfoWindow(); 
     var html = "" 
     for (i=0;i<count;i++){ 
      html=html+'<strong>'+name+'</strong.><br />'+request[i]+'<br />'+timetoserve[i]+'<br />'+mean[i]+'<br />'+std_dev[i]+<br />; 
      //var html='<strong>'+name+'</strong.><br />'+request+'</strong.><br />'+timetoserve+'</strong.><br />'+mean+'</strong.><br />'+std_dev; 
     } 
     google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(MYMAP.map, marker); 
     }); 
     MYMAP.map.fitBounds(MYMAP.bounds); 
    }); 
}); 
} 

有了更新,它不再拥有它看起来像的数组问题,即使我现在正在获取地图来渲染。 “显示标记”按钮没有用标记填充地图。用这种方式运行FireBug似乎只能为jQuery带来无数次的“Break on error”命中和警告。

 var request[count] = $(this).find(requeststring).text(); 
     var timetoserve[count] = $(this).find(timetoservestring).text(); 
     var mean[count] = $(this).find(meanstring).text(); 
     var std_dev[count] = $(this).find(std_devstring).text(); 

 request[count] = $(this).find(requeststring).text(); 
     timetoserve[count] = $(this).find(timetoservestring).text(); 
     mean[count] = $(this).find(meanstring).text(); 
     std_dev[count] = $(this).find(std_devstring).text(); 

- 假设这些是不是你正常工作的阵列。

如果我可以提一个建议(RE您的评论今天上午):

while ($(this).find(requeststring).text()){ 
     //...omitted 
    } 

如果你所有的标签重命名为同样的事情,给他们一个id属性(这是有效的XML)你可以这样做:

var requests = $(this).find('request'); 
    var timetoserves = $(this).find('timetoserve'); 
    // etc... 
    for (var i=0; i<requests.length; i++) { 
     request[i] = requests.eq(i).text(); 
     timetoserve[count] = timetoserves.eq(i).text(); 
     //etc... 
    } 

这可能会提供更好的性能。

+0

那是解决方案吗? (花了我一秒钟才注意到) – 2011-03-17 19:04:21

+0

哇......真的吗?我无法相信我会双重初始化变量。谢谢你指出我。 – 2011-03-17 19:19:27

+0

更新了该问题,我现在确实收到了“Google尚未定义”。 :( – 2011-03-17 19:22:35