Google 地图 API: 鼠标悬停仅在一天中的特定时间有效

Google Maps API: Mouseover works only during a certain time of the day

我必须说这是我在编程冒险中遇到的最奇怪的错误。我真的不知道为什么会这样。

基本上,我的应用程序必须从 Mysql 数据库接收一些数据,并且当用户在某个国家/地区单击时,必须出现一个信息窗口,其中包含一些信息(来自数据库)。数据库通信工作正常,问题是:当我将鼠标经过一个国家时,有时不会调用 mouseover 事件,与 mouseout 相同。

但有时呢?以什么频率?这是最奇怪的部分:在一天中的特定时间。我是巴西人,我在这里使用 UTC -3 工作,如果我在 18:00 访问我的应用程序,它不起作用,但是如果我在早上访问它,比如早上 7 点,它就可以工作。

我真的不知道为什么会这样,试图在网上搜索但没有找到...

有人可以帮助我吗?这是我正在使用的代码(js控制台中没有出现错误,错误发生在chrome、firefox、IE...):

<script type="text/javascript" >
      var colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00'];
      var map
      var infowindow;

      function initialize() {
        var myOptions = {
          zoom: 2,
          center: new google.maps.LatLng(10, 0),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById('map-canvas'),
            myOptions);

    geocoder = new google.maps.Geocoder();


        // Initialize JSONP request
        var script = document.createElement('script');
        var url = ['https://www.googleapis.com/fusiontables/v1/query?'];
        url.push('sql=');
        var query = 'SELECT name, kml_4326 FROM ' +
            '1foc3xO9DyfSIF6ofvN0kp2bxSfSeKog5FbdWdQ';
        var encodedQuery = encodeURIComponent(query);
        url.push(encodedQuery);
        url.push('&callback=drawMap');
        url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');
        script.src = url.join('');
        var body = document.getElementsByTagName('body')[0];
        body.appendChild(script);
      }

      function drawMap(data) {
        var rows = data['rows'];
        for (var i in rows) {
          if (rows[i][0] != 'Antarctica') {
            var newCoordinates = [];
            var geometries = rows[i][1]['geometries'];
            if (geometries) {
              for (var j in geometries) {
                newCoordinates.push(constructNewCoordinates(geometries[j]));
              }
            } else {
              newCoordinates = constructNewCoordinates(rows[i][1]['geometry']);
            }
            //var randomnumber = Math.floor(Math.random() * 4);
            var country = new google.maps.Polygon({
              paths: newCoordinates,
              //strokeColor: colors[randomnumber],
              strokeOpacity: 0,
              strokeWeight: 1,
              //fillColor: colors[randomnumber],
              fillOpacity: 0
            });

        infowindow =  new google.maps.InfoWindow({
            content: ''
        });

            google.maps.event.addListener(country, 'mouseover', function() {
              alert("HIIIIII JOW");
              this.setOptions({fillOpacity: 0.3});
            });
            google.maps.event.addListener(country, 'mouseout', function() {
              this.setOptions({fillOpacity: 0});
            });
            google.maps.event.addListener(country, 'click', function(event) {
                var lat = event.latLng.lat();
                var lng = event.latLng.lng();

                initialize2(lat,lng);

            });
            country.setMap(map);
          }
        }
      }

      function constructNewCoordinates(polygon) {
        var newCoordinates = [];
        var coordinates = polygon['coordinates'][0];
        for (var i in coordinates) {
          newCoordinates.push(
              new google.maps.LatLng(coordinates[i][1], coordinates[i][0]));
        }
        return newCoordinates;
      }


      function initialize2(lat,lng){
        var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng+ "&sensor=true&language=en";
        jQuery.getJSON(url, function (data) {

        for (var i = 0; i < data.results[0].address_components.length; i++){
            //var formatted = results[0].formatted_address;//.short_name
            var countryName
            var shortname = data.results[0].address_components[i].short_name;
            var longname = data.results[0].address_components[i].long_name;
            var type = data.results[0].address_components[i].types;
            if (type.indexOf("country") != -1){
                if (isNullOrWhitespace(shortname)){
                    countryName = shortname;
                }
                else{
                    countryName = longname;
                }
            }
        }
        var lat2;
        var lng2
        geocoder.geocode( {'address' : countryName}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                lat2 = results[0].geometry.location.lat();
                lng2 = results[0].geometry.location.lng();
                //alert(results[0].geometry.location);//map.setCenter(results[0].geometry.location);
                //alert(lat2+','+lng2);
                var array = <?php echo json_encode($arr); ?>;

                var str = 'Nenhuma exchange cadastrada neste país!';

                for(var i = 0;i<array.length;i++){

                    if(countryName==array[i][0]){
                        var string = 'country_volume.php?country=' + countryName;
                      str = '<center><strong>'+array[i][0]+'</strong></center>' +
                            '<strong>Número de Exchanges: </strong>' + array[i][1] + '</br>' +
                            '<strong>Volume: </strong>' + array[i][2] + '</br>' +
                            '<strong>Ranking Mundial: </strong> ' + array[i][3] + 'º' + '</br>' +
                            '<strong>Porcentagem Mundial (%): </strong> ' + array[i][4] + '%' + '</br>' +
                            '<a href='+string+'>' + 'Mais Informações' + '</a>';
                    }

                }

                if (infowindow) infowindow.close();
                infowindow =  new google.maps.InfoWindow({
                    content: str,
                    map: map,
                position: new google.maps.LatLng(lat2,lng2)
                });

            }
        });

        });
      }

    function isNullOrWhitespace(text) {
        if (text == null) {
            return true;
        }
        return text.replace(/\s/gi, '').length < 1;
    }


      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

您可能超过了 Fusion Tables 的每日 quota API:

默认请求配额限制如下:

每个 API 项目每天 25,000 个请求,其中读取计为一个请求,写入计为五个请求。

每 table 每分钟 30 个写入请求 您可以在 "Quotas" 选项卡下的 Google APIs Console 请求更多配额。

存储配额限制为:

  • 每个 table100 MB
  • 您的 table 中的总计 250 MB

详情请参考here