자바스크립트 질문드립니다..
본문
아래소스에서 document.write 의 주석을 풀면 주소가 표기되는데요
return 받아서 하단에서 불러오면 undefined 뜹니다..
어느문법이 잘못되었는지 좀 봐주실분.. 감사드리겠습니다..
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=키값&libraries=services"></script>
<script>
let lat = 33.450701;
let lng = 126.570667;
function getAddr(lat,lng){
let geocoder = new kakao.maps.services.Geocoder();
let coord = new kakao.maps.LatLng(lat, lng);
let callback = function(result, status) {
if (status === kakao.maps.services.Status.OK) {
//console.log(result);
return result[0].address.address_name;
//document.write(result[0].address.address_name);
}
};
geocoder.coord2Address(coord.getLng(), coord.getLat(), callback);
}
aaa = getAddr(lat,lng);
document.write(aaa);
</script>
답변 4
몇가지 방법으로 테스트 해보니 일반적인 방법으로 값이 잘 전달이 안되는 것 같고 아래처럼 하세요
var add
function getAddr(lat,lng){
let geocoder = new kakao.maps.services.Geocoder();
let coord = new kakao.maps.LatLng(lat, lng);
let callback = function(result, status) {
if (status === kakao.maps.services.Status.OK) {
console.log(result);
// alert( result[0].road_address.address_name);
add= result[0].address.address_name;
//document.write(add);
}
}
geocoder.coord2Address(coord.getLng(), coord.getLat(), callback);
}
getAddr(lat,lng);
setTimeout(function(){document.write(add); alert(add) }, 500);//<---8000(8초)까지는 필요 없습니다. 8초나 걸려야 한다면 쓸 수 없는 상태입니다
var aaa = getAddr(lat,lng);
안되는가요?
함수내에서는 나오는데 함수 밖에서 값이 안나온다면 함수에서 값을 추출하기도 전에 함수밖의 코드가 실행 되어서 입니다
방법은 두가지
1. return result[0].address.address_name; <--이 자리에 값을 출력하는 코드를 넣는다
document.write(result[0].address.address_name);
2. 주소를 추출하는 시간 동안의 딜레이를 약간 주어서 값을 출력한다
var aaa = getAddr(lat,lng);
setTimeout(function(){ document.write(aaa); }, 1000);