如何通过javascript超时谷歌地图地理编码器? [英] How can I timeout a google maps geocoder via javascript?

查看:26
本文介绍了如何通过javascript超时谷歌地图地理编码器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 javascript 非常陌生,我遇到了地理编码器请求超时的问题.但是我被卡住了,我尝试将延迟添加到循环中,但似乎它们不起作用.如果您能提供帮助,我将不胜感激.

I am very new to javascript and I am having issues with timing out the geocoder requests. But I am stuck, I tries to add delays into loop, but seems like they don't work. If you can help, I would appreciarte it.

        <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>

推荐答案

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

When you submit the geocode request, you can start a timer in parallel and when the timer fires, you can declare the request to have timed out. The request will still continue, but you can ignore the results once it has timed out:

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);
}

这篇关于如何通过javascript超时谷歌地图地理编码器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆