簡體   English   中英

Google Maps中的JavaScript全局變量

[英]JavaScript global variable in Google Maps

我正在制作一個Web應用程序,使人們可以在Google地圖上查看公交車的位置。 我在JavaScript中使用全局變量遇到了一些問題。 window.variable對我不起作用。 在所有函數之外定義變量均無效。 這是我完整的客戶端代碼:

<!DOCTYPE html>
<html>
  <head>
    <title>Geolocation</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>
// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see a blank space instead of the map, this
// is probably because you have denied permission for location sharing.

var old = [];

function getLocation()
{
  $.get( "http://54.86.161.214/EC_bus_app/get_location.php", function( data ) {
    old=[];
    var buses = data;
    var number_of_buses = buses.slice(0,1);
    buses = buses.slice(2);
    buses = buses.slice(0,-1);

    var bus_coordinates_and_numbers = buses.split(/[ ]+/);
    var length_of_array = bus_coordinates_and_numbers.length;

  // Turn a single dimensional array into a multi-dimensional array

    for (var index = 0; index < bus_coordinates_and_numbers.length; index+= 3)
        old.push( bus_coordinates_and_numbers.slice(index, index + 3) );
    console.log(old);
    //initialize(old);

  });
}

setInterval(getLocation, 10000);

var map;

function initialize() {
  var mapOptions = {
    zoom: 18
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

var image = "icon_97.png";

  for (i=0;i<old.length; i = i + 1){
    var x = old[i][0];
    var y = old[i][1];
    var myLatlng = new google.maps.LatLng(x,y);
    var busMarker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        icon: image,
        title: old[i][2]
    });
  }

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);

      var infowindow = new google.maps.InfoWindow({
        map: map,
        position: pos,
        content: 'Your location'
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

  var infowindow = new google.maps.InfoWindow(options);
  map.setCenter(options.position);
}

google.maps.event.addDomListener(window, 'load', initialize);

    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>

有問題的變量是old 我可以使用initialize(old);get location函數中將其傳遞給initialize函數initialize(old); 但是,如您所見,我正在使用計時器,並使用initialize(old); 導致整個地圖一次又一次地重新加載,而我只希望位置標記一次又一次地加載。

通過將getLocation()移到initialize()解決了該問題。 但是@geocodezip在評論中所說的也完全回答了我的問題。

您的問題不在於全局變量。 它具有異步功能。 您需要初始化地圖,然后請求數據(異步請求),在地圖上做標記,然后定期更新它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM