如何通过javascript超时谷歌地图地理编码器?

时间:2012-01-26 06:02:30

标签: javascript api google-maps delay

我对javascript很新,我遇到了超时地理编码器请求的问题。 但我陷入困境,我试图在循环中添加延迟,但似乎它们不起作用。 如果你能提供帮助,我会很感激。

        <script type="text/javascript">

        function setLocationOnMap(locs) {
            var myOptions = {
                zoom: 4,
                center: new google.maps.LatLng(locs.lat(), locs.lng()),
                mapTypeId: google.maps.MapTypeId.ROADMAP          
            };
            var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions); 

            var i=0;
            var total='<?php echo $counter ?>';

            for (i=0; i<total;i++){//adding cities to map by
                var city= document.the_form.elements[i].value;

                getLatLong2(city, map, setPointer);
            }                
        }

        function setPointer(map, address, locs2){
            var position = new google.maps.LatLng(locs2.lat(), locs2.lng());
            var marker = new google.maps.Marker({
                position: position,
                map: map
            });
            marker.setTitle(address);
        }


        function initialize() {
            var address = "Chicago IL";
            getLatLong(address, setLocationOnMap);
        }

        function getLatLong2(address, map, callback){
            var geo = new google.maps.Geocoder;
            geo.geocode({'address':address},function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    locs2 = results[0].geometry.location; 

                    callback(map, address, locs2);
                } else {
                    //alert("Geocode was not successful for the following reason: " + status);
                }
            });
        }



        function getLatLong(address, callback){
            var geo = new google.maps.Geocoder;
            geo.geocode({'address':address},function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    // processing...
                    locs = results[0].geometry.location; 
                    //pausecomp(10000);

                    callback(locs);
                } else {
                    //alert("Geocode was not successful for the following reason: " + status);
                }
            });
        }
    </script>

1 个答案:

答案 0 :(得分:2)

当您提交地理编码请求时,您可以并行启动计时器,当计时器触发时,您可以声明请求已超时。请求仍将继续,但一旦超时,您可以忽略结果:

function getLatLong(address, callback){
    var timerId;
    var timedOut = false;

    var geo = new google.maps.Geocoder;
    geo.geocode({'address':address},function(results, status){
        if (timedOut) {
            // this request timed out, so ignore results
            return;
        } else {
            // this request succeeded, so cancel timer
            clearTimeout(timerId);
        }

        if (status == google.maps.GeocoderStatus.OK) {
            locs = results[0].geometry.location; 
            callback(locs);
        } else {
            //alert("Geocode was not successful for the following reason: " + status);
        }
    });

    timerId = setTimeout(function() {
        timedOut = true;
        alert('Request timed out.');
        // do something else
    }, 10000);
}