【问题标题】:Settimeout to avoid over_query-limit设置超时以避免 over_query-limit
【发布时间】:2012-10-04 06:12:05
【问题描述】:

我正在尝试使用 googlemaps 地理编码器检索地址..但我只得到几个地址..因为我看到我的 javascript 在 10 个地址之后无法检索..下面是我的代码

function fetchData(lat,lng,type){   

    $('#placedata').empty();
    myLatlng = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
    map = new google.maps.Map(document.getElementById('map'), {
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    center: myLatlng,
                    zoom: 10});
    var request = {location: myLatlng,radius: 50000,types: [type]};
    var service = new google.maps.places.PlacesService(map);
    service.search(request, callback);
  }

  function callback(results, status) {  

      for (var i = 0; i < results.length; i++) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {  
          createMarker(results[i]);     
        }       
    }
  }

  function createMarker(place) {
    place.geometry.location});

    var request = {reference: place.reference,};
    service = new google.maps.places.PlacesService(map);
    service.getDetails(request, detailsDisplay);

    function detailsDisplay(details, status) {      
        $('#placedata').append('<tr><td><a href='+details.url+'>'+details.name+'</a></td></tr>');

    }

}

我看到很多人有同样的问题..有没有办法或使用 setTimeout 函数并延迟请求,所以我得到至少 20 个地址..任何帮助将不胜感激..谢谢

【问题讨论】:

  • OVER_QUERY_LIMIT 是网页超出其请求配额的时间,根据 Maps API 库,为 25.000。当您获得第十条记录时,可能会发生一些错误。你检查callback()函数中的status了吗?
  • 警报语句给出了所有 20 个结果..如何检查状态
  • akert(ok);当我反复点击我得到 20 个结果
  • 好的,但是这个警报在哪里?要检查一切是否正常,您需要检查回调中的所有 20 个 status 是否返回 google.maps.places.PlacesServiceStatus.OK
  • 对不起,我没有得到你...获得 20 个结果,但无法在第一次运行时显示...我只能显示 10

标签: javascript google-maps-api-3 google-geocoder


【解决方案1】:

解决办法是使用setTimeout来防止OVER_QUERY_LIMIT

function createMarker(place) {
    //var placeLoc = place.geometry.location;
    //var marker = new google.maps.Marker({map: map,zIndex: 100,position: place.geometry.location});

    var request = {
        reference : place.reference,
    };

    service = new google.maps.places.PlacesService(map);

    service.getDetails(request, function(details, status) {
        if (status === google.maps.places.PlacesServiceStatus.OK) {
            $('#placedata').append('<tr><td><a href='+details.url+'>' + details.name + '</a></td></tr>');
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
            setTimeout(function() {
                createMarker(place);
            }, 200);
        }
    });
}

【讨论】:

  • 嗨..如果结果超过 20..如果有问题..我可以得到结果但无法显示超过 20
  • 嗨..显示所有结果时出现问题..获得 60 个结果,但使用上述超时功能只能显示 20 个结果。
【解决方案2】:

我有解决办法。

试试这个

if(pagination.hasNextPage){
pagination.nextPage();
}

if(pagination.b == null){
createMarker(place);
}

//不需要setTimeout。尝试这个。对你有帮助。

【讨论】:

  • 想解释一下到底什么是分页以及你从哪里得到这个变量?原来的帖子,没有提到它。
  • pagination 是 Google Map Places 服务 Api 中的回调函数 service.nearbySearch(request, function(results, status, pagination) {
猜你喜欢
  • 1970-01-01
  • 2022-10-04
  • 2011-09-23
  • 2017-03-18
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多