Добавление свойства: пары значений из GooglemapsAPI в существующий объект json / javascript - PullRequest
0 голосов
/ 07 апреля 2010

Я пытаюсь создать скрипт, который находит ближайший магазин / местоположение к клиенту, используя googlemapsAPI. Итак, у меня есть объект json, который представляет собой набор объектов магазина. Используя Jequery .each для итерации этого объекта, я собираю время в пути от клиента до каждого магазина. Если он находит направления, он копирует продолжительность диска, который является объектом со временем в секундах и человеческим значением. Это работает, однако, когда я пытаюсь отсортировать все эти объекты магазина с добавленным временем на диске, я не могу прочитать объект, скопированный с Google. Если я console.log весь объект, 'closest_store', он показывает значения, которые я ищу. Когда я пытаюсь прочитать значения напрямую через closest_store.driveTime, Firebug выводит неопределенное в консоли. Что мне здесь не хватает?

$.getJSON('<?php echo Url::base() ?>oldservices/get_locations', {}, function(data){
            $.each(data, function(index, value)
            {
                var end = data[index].address;

                var request = {
                    origin: start,
                    destination: end,
                    travelMode: google.maps.DirectionsTravelMode.DRIVING
                };

                directionsService.route(request, function(response, status)
                {
                    //console.log(response);
                    if (status == google.maps.DirectionsStatus.OK)
                    {
                        value.driveTime = response.trips[0].routes[0].duration.value;
                        //console.log(response.trips[0].routes[0].duration.value);
                    };
                });


            });


            var closest_store;
            $.each(data, function(index, current_store)
            {
                if (index == 0)
                {
                    closest_store = current_store;
                }
                else if (current_store.driveTime.value < closest_store.driveTime.value)
                {
                    closest_store = value
                };
                console.log(current_store.driveTime);
            }
        )



        });

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Во втором $.each я не уверен, что value означает, что код ссылается. Попробуйте этот подход вместо:

Сделайте это, чтобы установить значение:

data[index].driveTime = response.trips[0].routes[0].duration.value;

Используйте это для своей нижней петли:

var closest_store;
$.each(data, function(index, current_store) {
    if (index == 0) {
        closest_store = current_store;
    } else if (current_store.driveTime.value < closest_store.driveTime.value) {
        closest_store = current_store;
    };
    console.log(current_store.driveTime);
});

Обновление для исправления асинхронной проблемы:

$.getJSON('<?php echo Url::base() ?>oldservices/get_locations', {}, function(data){
  var count = 0;
  $.each(data, function(index, value) {
    var end = data[index].address;
    var request = { 
          origin: start,
          destination: end,
          travelMode: google.maps.DirectionsTravelMode.DRIVING
        };
    count++;
    directionsService.route(request, function(response, status) {
      count--;
      if (status == google.maps.DirectionsStatus.OK)
        value.driveTime = response.trips[0].routes[0].duration.value;
      if (count == 0)
        getClosestStore(data);
    });
  });
});


function getClosestStore(data) {
  var closest_store = data[0];
  $.each(data, function(index, current_store) {
    if (current_store.driveTime.value < closest_store.driveTime.value)
      closest_store = current_store;
  });
  //do something with closest_store
}

Это подсчитывается перед отправкой запроса, и когда каждый запрос возвращается, отсчитывается ... когда мы возвращаемся к 0 (последний запрос возвращается), он затем запускает функцию, которая вычисляет ближайшее хранилище.

0 голосов
/ 07 апреля 2010

Почему бы вам просто не использовать value.address вместо data[index].address?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...