2013-07-27 6 views
0

마우스를 클릭 한 영역을 기반으로지도에 마커를 배치하는 스크립트를 만들었습니다. 마커가 놓여지면 마우스가 마커 위로 움직일 때 마커가 놓여있는 곳의 주소가 infobox에 나타납니다. 그러나 "info_text"를 호출하면 undefined가 반환되기 때문에 정보창이 표시되지 않습니다. 콜백 함수를 추가해야한다는 것을 알았지 만 올바르게 구현한다고 생각하지 않습니다. 누구든지 내 코드를 수정하도록 도와 줄 수 있습니까? 감사합니다콜백 함수가 작동하지 않습니다.

내 코드 :

var geocoder; 

function initialize() 
{ 

    geocoder = new google.maps.Geocoder(); 
    var event = google.maps.event.addListener; 

    // intializing and creating the map. 
    var mapOptions = { 
    zoom: 4, 
    center: new google.maps.LatLng(-25.363882, 131.044922), 
    mapTypeId: google.maps.MapTypeId.TERRAIN 
    }; 

    var map = new google.maps.Map(document.getElementById('map'), 
     mapOptions); 

    event(map,'click',function(e){ 
    var marker = placeMarker_and_attachMessage(e.latLng,map,count); 
    count = count + 1; 
    }); 

} // end of initalize. 

function placeMarker_and_attachMessage(position,map) 
{ 
    var event = google.maps.event.addListener; 
    var message = ['This', 'is', 'the', 'secret', 'message']; 

    var marker = new google.maps.Marker({ 
     position: position, 
     map: map 
    }); 

    var pos = info_text(position); 
    alert('pos is: ' + pos); 

    var infowindow = new google.maps.InfoWindow({ 
      content: 'hello' 
     }); 

    event(marker,'mouseover',function(){ 
     infowindow.open(map,this); 
    }); 

    event(marker,'mouseout',function(){ 
     infowindow.close(); 
    }); 

} // end of function. 

function info_text(position) 
{ 
    var lat = parseFloat(position.lat()); 
    var lng = parseFloat(position.lng()); 
    alert('lat,lng is: ' + (lat,lng)); 
    var latlng = new google.maps.LatLng(lat,lng); 
    alert('just before geocode'); 
    geocoder.geocode({'latLng': latlng}, function(results, status) 
    { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      alert('in info_text If statement'); 
      if(results[1]) 
      { 
       alert('in inner if statement'); 
       var finalResult = myCallback(results[1].formatted_address); 
       return finalResult; 
      } 
      else 
      { 
       alert('no results found'); 
      } 
     } 
     else 
     { 
      alert('could not pinpoint location'); 
     } 

    }); 
} 

function myCallback(loc) 
{ 
    alert('i have a location!'); 
    return loc; 
} 

google.maps.event.addDomListener(window, 'load', initialize); 
+1

안녕하세요. 비동기 코드에서 콜백을 사용하는 방법에 대한 약간의 오해가 있습니다. [더 읽을 거리] (http://en.wikipedia.org/wiki/Callback_ (computer_programming))를 추천 해 주시겠습니까? 결론은 시도하는 방식으로 콜백 값을 반환 할 수 없다는 것입니다. – Jivings

+0

@Jivings : 답장을 보내 주셔서 감사합니다. 내 방식대로 작동하지 않으면 주소를 반환하는 가장 좋은 방법은 무엇입니까? – user1923

+0

콜백 함수에서 원하는 동작을 수행해야합니다. – Jivings

답변

0

귀하의 info_text하지 return 아무것도하지 기능 때문에이 라인 : pos이 정의입니다

var pos = info_text(position); 

입니다. (당신이 아래로 더했던 것처럼) 함수의 어떤 시점에서

return something; 

:

당신은 포함해야합니다.

추가 귀하의 값을 반환 myCallback 기능 만이 사용됩니다

myCallback(results[1].formatted_address); 

가 어디 반환 값을 저장하지 않습니다 - 그냥 삭제됩니다.

+0

myCallback (...)을 변수로 설정 한 다음 내부 if 문으로 반환했습니다. 그래서 "정의되지 않은"위치는 나타나지 않지만 마커 위로 마우스를 가져 가면 정보 상자가 나타나지 않습니다 ... 그 이유는 무엇입니까? "안녕하세요?" – user1923

+0

게시 코드의 변수에'myCallback()'을 설정하지 않았기 때문에 조금 잃어 버렸습니다. –

+0

'geocoder.geocode'는 AJAX 호출이라고 가정하므로이 대답은 사용자 문제를 해결하지 않을 것입니다. – Jivings

관련 문제