在发出客户端请求时OVER_QUERY_LIMIT

时间:2014-04-09 22:36:44

标签: javascript google-maps-api-3

我正在从客户端向25个地址的数组发出地理编码请求,并为其中的14个地址收到此错误。这是我的代码,我认为这将是一个延迟:

$(function() {

    var addresses = ["... bunch of addresses..."];

    var geocoder = new google.maps.Geocoder();
    var outputContainer = $('#resultsContainer');

    addresses.forEach(function(address) {
        setTimeout(function() {
            geocoder.geocode({
                'address': address
            }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    outputContainer.append('<p>' + address + ' : ' + results[0].geometry.location.A + ' , ' + results[0].geometry.location.k + '</p>');
                } else {
                    outputContainer.append('<p>' + address + ' : Not found, Status: ' + status.toString() + '</p>');
                }
            });
        }, 4000);
    });
})

我很可能在这里遗漏了一些东西,但是我的生活不能想到现在的情况。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为每个索引设置循环内部的超时并不能为每个索引设置相同的超时时做很多事情。循环将很快完成(毫秒我估计),并且AJAX请求仍然会同时触发。 Google每秒只允许一个请求(或类似的东西,我不知道它们允许的确切速率)。

如果将较小的超时乘以循环中的当前索引,则可以错开请求。如果这是用户将要等待的东西,我会从低位开始看看你可以逃脱的东西。

以下是我的意思的一个简单示例:

addresses.forEach(function(address, index) {
    setTimeout(function() {
        //some really fun stuff happens here
    }, 500 * index);
});

这将运行&#34;真正有趣的东西&#34;一次一个,每半秒一次。第一个索引(0)将没有超时持续时间,第二个将获得500毫秒,第三个为1,依此类推。