2011-06-16 2 views
2

Я пытаюсь геокодирование название места, однако при запуске функции, я получаю,Google Maps v3 Геокодировать

«пустая строка» в моей консоли,

ниже мой код, почему бы это что происходит?

function getLatLong(address) 
{ 
    var geocoder = new google.maps.Geocoder(); 
    var result = ""; 
    geocoder.geocode({ 'address': address, 'region': 'uk' }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      result = results[0].geometry.location; 
     } else { 
      result = "Unable to find address: " + status; 
     } 
    }); 
    console.log(result); 
} 

UPDATE

Хорошо, так что я получил мое значение будет консоль, теперь, когда я пытаюсь нажать значение элемента в функцию, я получаю неопределенный как возвращение, ниже полный код,

function getLatLong(address) 
{ 
    var geocoder = new google.maps.Geocoder(); 
    var result = ""; 
    geocoder.geocode({ 'address': address, 'region': 'uk' }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      result = results[0].geometry.location; 
      return result; 
     } else { 
      result = "Unable to find address: " + status; 
      alert(result); 
     } 
    }); 
} 

//getLatLong("YORK"); 

function loadScript(postcode){ 
    alert(postcode); 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize?"+postcode; 
    document.body.appendChild(script); 
    } 

    /* load map on visitors location */ 
    function initialize(postcode){ 
    var myLatlng = new google.maps.LatLng(getLatLong(postcode)); 
    var myOptions = { 
     center: myLatlng, 
     zoom:13, 
     disableDefaultUI: true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 

    var map = new google.maps.Map(document.getElementById('map'), myOptions); 
    google.maps.event.trigger(map, 'resize'); 
    map.setZoom(map.getZoom()); 
    var marker = new google.maps.Marker({ 
     position: myLatlng, 
     map: map, 
     icon:'http://google-maps-icons.googlecode.com/files/home.png', 
    }); 
    } 

И это называется, как это,

$(function(){ 
    $("dd a, dt a").live("click", function(){ 
     var self = $(this); 
     $("#overlay").fadeIn('slow'); 
     var targetProcent = 85; 
     var targetWidth = $(window).width() * (targetProcent/100); 
     var targetHeight = $(window).height() * (targetProcent/100); 
     var targetX = ($(window).width() - targetWidth)/2; 
     var targetY = ($(window).height() - targetHeight)/2 + $(document).scrollTop(); 
     $('#lightbox').height(700); 
     $('#lightbox').width(targetWidth); 
     $('#lightbox').load(self.attr("href")); 
     loadScript($("#postcode").val()); 
     //usePointFromPostcode(document.getElementById('postcode').value, placeMarkerAtPoint) 
     $('#lightbox').css({ 
      "position": "absolute", 
      "top": targetY+"px", 
      "left": targetX+"px" 
     }).fadeIn('slow'); 
     return false; 
    }); 
    }); 

$ («# postcode»). Val() относится к элементу, который загружается при использовании load()

ответ

4

вы делаете асинхронный вызов, а затем печатаете на консоль. hasnt вызов возвращается еще

решение:

Подведите console.log в обратный вызов

редактировать: обратного вызова анонимной функции, что вы передаете в качестве аргумента геокодировать, его подпись function(results, status) вы должны поставить console.log вызов в КОНЦЕ этой функции

EDIT для правки:

сценарий URL выглядит как его неправильно:

"http://maps.google.com/maps/api/js?sensor=false&callback=initialize?"+postcode 

я уверен, что лавируя на почтовый индекс не делает ничего?. Во всяком случае, URL должен содержать только один? перед началом параметров запроса. Кажется, что вы хотите передать почтовый индекс функции initialize, самый простой способ сделать это через глобальную переменную.

установить глобальную переменную в функции loadScript и читать его в initialize функции

+0

Что обратного вызова? – Udders

+0

change '}); console.log (результат); 'to ' console.log (результат); }); ' – venimus