Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.01.2010, 16:01
Новичок на форуме
Отправить личное сообщение для Cepega Посмотреть профиль Найти все сообщения от Cepega
 
Регистрация: 13.01.2010
Сообщений: 2

Мой скрипт не успевает за API (Google Maps)
Всем добрый день.
Надо сделать скрипт, который бы выдавал общее расстояние по нескольким адресам.
Вот мой скрипт (для удобства отладки я разбил его на отдельные функции):
<script type="text/javascript">
    
    var geocoder, location1, location2, gDir, locationTo;   
    var addressTo = [];

    //Обработчик кнопки для добавления еще одного поля для адреса
    function addLocation()
	{
	    var div = document.getElementById("addLocations");		    
	    div.innerHTML += "<input type=\"text\" name=\"Address\" value=\"Москва\" />";
	}	
	
    function initialize() 
    {        
//        debugger    
        geocoder = new GClientGeocoder();
	    gDir = new GDirections();	    
	   
	    GEvent.addListener(gDir, "load", function() {
    		var drivingDistanceMiles = gDir.getDistance().meters / 1609.344;
	    	var drivingDistanceKilometers = gDir.getDistance().meters / 1000;
    		document.getElementById('results').innerHTML = '<strong>Address 1: </strong>' + location1.address + ' (' + location1.lat + ':' + location1.lon + ')<br /><strong>Address 2: </strong>' + location2.address + ' (' + location2.lat + ':' + location2.lon + ')<br /><strong>Driving Distance: </strong>' + drivingDistanceMiles + ' miles (or ' + drivingDistanceKilometers + ' kilometers)'; 
	    });
    }
    
    function showLocation() 
    {        
        var addressFrom;         
        var count = document.getElementsByName("Address").length;
        addressFrom = document.getElementsByName("Address")[0].value;        
        for (var i=1; i<count; i++)
        {            
            addressTo.push(document.getElementsByName("Address")[i].value);        
        }   
        
        geocoder.getLocations(addressFrom, getLocationFrom);         
    }
    
    function getLocationFrom(response)
    {
        debugger
        if (!response || response.Status.code != 200)
        {            
            alert("Sorry, we were unable to geocode the first address");
        }
        else
        {  
	        location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
	        geocoder.getLocations(addressTo[0], getLResponse);
        }
    }    
   
    function getLResponse(response)
    {
        if (!response || response.Status.code != 200)
        {
            alert("Sorry, we were unable to geocode the second address");
        }
        else
        {
	        location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
	        locationTo = location2.address;            
           
            if (addressTo.length > 1)
            {
                for (var i = 1; i < addressTo.length; i++)
                {
                    geocoder.getLocations(addressTo[i], getAddLocation);
                }                    
            }
           //!!!!!!!!Метод ниже срабатывает быстрее, чем я пробегаю по всем адресам.
            gDir.load('from: ' + location1.address + ' to: ' + locationTo);  
            form1.submit();
	    }
    }
    
    function getAddLocation(response) 
    {
        if (!response || response.Status.code != 200)
        {
            alert("Sorry, we were unable to geocode the second address");
        }
        else
        {
            location2 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
            locationTo += 'to:' + location2.address;		
        }        
    }
    </script>

<body onload="initialize()" onunload="GUnload()">
    <form action="#" id="form1" method="get">
    <input type="text" name="Address" value="Москва" />
    <input type="text" name="Address" value="Рязань" />
   
    <div id="addLocations">
    </div>
    <input type="button" value="Добавить адрес" onclick="addLocation();" />
    <input type="button" value="Расчитать" onclick="showLocation();" />    
    </form>
    <p id="results">
    </p>
</body>


В коде я пометил метод, с которым у меня трудности.
Иными словами надо чтобы gDir.load('from: ' + location1.address + ' to: ' + locationTo); вызывался после того как я обработаю все адреса. А он вызывается когда у меня только 1 адрес.
Я не очень силен в js, может кто-нибудь подсказать, что мне надо сделать, чтобы метод подождал пока обработаются все адреса в цикле, где вызывается функция getAddLocation, а потом уже вызывался метод gDir.load?

Последний раз редактировалось Cepega, 13.01.2010 в 16:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оцените мой jQuery скрипт Денис Белкин Ваши сайты и скрипты 4 20.04.2010 15:28
Оцените мой скрипт игры micscr Ваши сайты и скрипты 26 21.12.2009 10:50
Google maps maxWidth: ??? konstantinopol Общие вопросы Javascript 8 16.03.2009 18:20
Как создать проверку вводимого пароля на стойкость, используя API Google. Александр Черепов Элементы интерфейса 4 03.11.2008 02:16