Intereting Posts
Допустимый размер памяти 33554432 байт исчерпан (пытался выделить 12 байт) Настройка заголовков для тестовых блоков CakePHP Доктрина ManyToMany с условием соединения Зачем нам нужно указывать тип параметра в bindParam ()? Публикация на страницу Facebook из приложения Facebook без входа в facebook как использовать Zend_Auth для аутентификации пользователя при загрузке с помощью ckeditor plugin pgrfilemanager как проверить, не возвращает ли запрос mysql никакого результата (запись не найдена) с использованием php? Безопасность – SQL pcntl выполняет один и тот же код несколько раз, требуется помощь Пэкинг не работает при добавлении AJAX php url routing question Как установить ImageMagick для использования с PHP в Windows 7 (3) Как отобразить экран загрузки в Laravel между формой отправки и отображаемыми данными Как передать параметр из контроллера в макет в YII2 Почему Magento не смог сохранить клиента после создания идентификатора?

Ошибка с картами google api3

Я пытаюсь встроить карту google с маркерами на свою веб-страницу. Но я получаю неопределенное предупреждающее сообщение, если я использую следующий код

var infowindow = null; var geocoder; $(document).ready(function () { initialize(); }); function codeAddress(address) { geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { //alert(results[0].geometry.location); return (results[0].geometry.location); } }); } function initialize() { default_location = codeAddress("<?php echo $location;?>"); alert(default_location); } 

Вместо этого Если я выполняю предупреждение с помощью функции codeAdress, как показано ниже, он правильно показывает широту и долготу.

 var infowindow = null; var geocoder; $(document).ready(function () { initialize(); }); function codeAddress(address) { geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { alert(results[0].geometry.location); } }); } function initialize() { codeAddress("<?php echo $location;?>"); } 

Может ли кто-нибудь определить, в чем проблема? Я новичок в javascripts

Вызов геокодера является асинхронным, что означает, что требуется некоторое время для возврата и не следует последовательного порядка, как написано. Это также означает, что в первом бите функция заканчивается до того, как она return (results[0].geometry.location) к вашему return (results[0].geometry.location) . Так что alert имеет ничего общего.

Помимо ввода инструкций в запросе geocode , вы можете написать шаблон обратного вызова, чтобы отделить логику сценария. Обратный вызов, который передает местоположение в качестве параметра, выполняется, когда вызов geocode выполняется успешно.

http://jsfiddle.net/3KXKm/

  var infowindow = null; var geocoder = new google.maps.Geocoder(); $(document).ready(function () { initialize(); }); function codeAddress(address, callback) { geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { callback(results[0].geometry.location); } }); } function initialize() { codeAddress("Chicago, IL", function(default_location) { var map = new google.maps.Map(document.getElementById("map_canvas"), { center: default_location, zoom: 3, mapTypeId: google.maps.MapTypeId.ROADMAP }); locations = ["Los Angeles", "Davis", "Truth or Consequences", "Ann Arbor", "Massachusetts"]; for (var i = 0; i < locations.length; i++) { codeAddress(locations[i], function(latLng) { new google.maps.Marker({map:map, position:latLng}); }); } }); } 

Геокод не возвращает результат немедленно. Вот почему вы не получаете ничего в первой версии своего кода. Поэтому, если вы хотите что-то сделать с результатом геокодирования, вы должны сделать это в функции обратного вызова, как во второй версии вашего кода.

Ваш

 return (results[0].geography.location); 

Верните только значение вложенной функции, а не функцию codeAddress. Может быть, если вы скажете нам, что вы пытаетесь сделать, мы можем помочь.