지역 검색으로 지도 호출시 오류

$.ajax({
url : ‘https://dapi.kakao.com/v2/local/search/address.json’,
headers : { ‘Authorization’ : ‘KakaoAK *********’},
type : ‘GET’,
data : { ‘query’ : encodeURI(l_search_keyword) },
success : function(p_result) {
alert(“success”);
},
error : function(xhr, errmsg, errobj) {
alert(“fail”);
}
});

위 처럼 지역명으로 지도를 호출하면 계속 오류가 발생합니다.
문제가 되는 곳이 있을까요?

호출하신 지역명이 어떤걸까요?

‘서울’ 이라는 검색어로 테스트 하고 있습니다.

REST API 의 사용인데, 문의주신 계정 내 REST Key 로의 호출로그가 보이지 않습니다.
어떤 키를 사용하셨는지, 발생하는 오류가 무엇인 지 알려주세요.

image

코드 자체는 문제가 되지 않습니다.
'서울’이라는 쿼리로 검색시, 결과는 0개가 나오긴 하지만 정상적으로 응답 성공 콜백이 실행되고요.
위에 @C.L 님이 언급하신 부분을 확인 부탁드립니다.

1개의 좋아요

bloodinfo 쪽 도메인에서 “서울” 쿼리가 들어온 기록을 하나 찾았는데요
앱키가 정상적으로 들어오지 않았습니다. 그 부분을 다시 한번 확인해보세요.

추가로 지도API 사용에 있어 domain mismatch 오류도 발생한 기록이 보이는데요
www 를 포함하지 않는 도메인도 별도로 허용 등록해주세요.

지역명 검색에서 사용하고 있는 앱키는 'ff’로 시작하는 REST API키를 사용하고 있습니다.

다른 페이지에서는 아래 경로를 사용해서 지도를 잘 보여주고는 있거든요.
//dapi.kakao.com/v2/maps/sdk.js?appkey=javascript apikey

그럼 도메인은 문제가 없지 않을까 싶은데요.

혹시 사이트 도메인 추가 시 http://*.bloodinfo.net 이런 도메인도 가능한가요?

해당 카가 REST API 호출 시 제대로 들어오지 않는 것 같습니다.
개발페이지를 저희 쪽에서 볼 수 있는 방법이 있을까요? (있으면 메시지로 보내주세요)

사이트 도메인은 와일드카드는 허용하지 않는 것이 기본 정책입니다.
현재 기준으로는 http:// https:// 두 프로토콜에 대해서 www 가 없는 도메인 두 개만 등록해주시면 될 것 같습니다.

위에서 언급했던 소스로 에러를 확인해 보면 아래와 같습니다.
error code : 401
errorType : AccessDeniedError
message : cannot find appkey

appkey(rest api key) 도 하드코딩해서 테스트를 하고 있는데 계속 같은 오류가 발생하네요…ㅜㅜ
www 없는 도메인도 등록해서 테스트를 해봐도 같은 현상입니다.
혹시나 ajax 자체 문제인가 해서 url : ‘http://www.daum.net’ 이 경로로 테스트 하면 성공값이 리턴됩니다.

무엇이 잘못 되었는지 잘 모르겠습니다…ㅜㅜ

아래 소스는 다른 페이지에서 사용되고 있는 호출 부분이지만 지역명 검색과 같은 오류 현상이 나타나고 있습니다.
$.ajax({
headers : { ‘Authorization’ : ‘KakaoAK ffed9b5f11aa********************’},
url : ‘https://dapi.kakao.com/v2/local/geo/transcoord.json?x=160710.37729270622&y=-4388.879299157299&input_coord=WTM&output_coord=WGS84’,
contentType: “application/x-www-form-urlencoded; charset=UTF-8”,
dataType : ‘text’,
type : ‘GET’,
success : function(p_result) {
try {
alert(“success”);
} catch(ie) {
alert(ie.description);
}
},
error : function(request, status, error) {
try {
alert(“code : “+request.status+”\n”+“message : “+request.responseText+”\n”+"error : "+error);
} catch(e) {
alert(ie.description);
}
}

        });

아 우선 www 제외된 도메인 등록은 지도API 사용 관련입니다 (JS키를 쓰는)

Ajax 호출은 로컬 REST API 이구요.

에러에서 보시는 것처럼 (cannot find appkey)
호출시 앱키가 정상적으로 전달이 되지 않은 것인데요

datatype : ‘text’ 를 삭제해보시겠어요?

image

query param을 직접 URL에 포함시켰지만
그래도 변환요청에 따른 응답은 정상적으로 받을 수 있습니다.
다른 옵션들(datatype, contentType)을 똑같이 넣어봐도 정상적으로 출력 됩니다.

음… 무엇 때문에 어려움을 겪고 계신지 모르겠습니다.

키값을 다시 확인해보세요.

그래도 안된다면 확인에 한계가 있습니다.
테스트 환경을 말씀해 주시고
작성하신 코드를 확인할 수 있는 페이지 링크를 알려주시거나
해당 페이지 파일을 첨부해 주세요.

@doji.doo @blood_info

dataType: ‘jsonp’,

를 명시적으로 사용하지 않으면 jsonp 를 사용하는 건 아닌거죠?
저기서 겪고 계시는 현상이 꼭 REST API를 jsonp로 호출했을 때와 같아서 문의드려요 :slight_smile:

추가로, 키 자체의 문제는 아닙니다. 해당 키로 제가 테스트했을 때는 정상으로 나와요.

REST API AJAX CHECK 2019-01-08 21-09-16

@C.L @blood_info

권한 없음(401)이 뜨는 것은
jsonp 와 같은 요청 포멧/타입과는 크게 관련이 없을거에요.
appkey를 정상적으로 넘긴 상황이라면 일단 요청은 가게 될 거고
서버에서 appkey 인증까지는 무난하게 진행될 겁니다.
만약 jsonp로 타입을 지정했고 그 결과 에러가 난다면
요청에 상응하는 응답 데이터를 받은 상황 이 후 처리에서 스크립트 에러가 날 것이라 예상됩니다.
인증 자체가 실패해서 401로 떨어지는 일은 없을거에요.

에러 로그(“cannot find appkey”)로 추정되는 상황은
appkey가 요청헤더로 넘어가지 않은 상황입니다.

실제로 다음과 같은 코드에서 질문자 분과 같은 에러 메세지를 볼 수 있습니다.

$.ajax({
  url : 'https://dapi.kakao.com/v2/local/geo/transcoord.json?x=160710.37729270622&y=-4388.879299157299&input_coord=WTM&output_coord=WGS84',
//  headers : { 'Authorization' : 'KakaoAK 83324a5c861107b***************'},
  type : 'GET',
  contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  success : function(result) {
    console.log(result);
  },
  error : function(xhr, status) {
    console.log(status);
  }
});

헤더에 appkey를 실어 보내지 않은 상황이며
401 unauthorized로 코드 응답받고
응답 내용은 {"errorType":"AccessDeniedError","message":"cannot find appkey"} 와 같이 나옵니다.

그럼 jQuery로 헤더에 appkey를 실어 보낼 수 없는 상황을 예상해 볼 수 있겠는데요.
이는 IE9 이하에서 발생하며 이 경우에는 클라이언트에서 ajax로 사용할 수 없습니다.

아래 포스트에서 언급한 적이 있습니다. 참고해 주세요.

1개의 좋아요

@blood_info

음 직접적인 해당 이슈에 대한 해결포인트가 아닐 수도 있긴 합니다만
해당 기능을 REST API로 사용하셔야 하는 이유가 따로 있을까요?

당사 지도 API를 기본 사용하시는 구조이기 때문에
주소검색은 아래 라이브러리를 사용하시는 것을 권장하고 있는데요
(기타 로컬 REST API도 다 라이브러리로 지원하고 있습니다.)

http://apis.map.daum.net/web/sample/addr2coord/

이 부분도 한번 같이 확인부탁드립니다.

REST API 호출은 성공 했습니다.
headers 선언을 아래와 같이 바꾸니까 되더라구요.
beforeSend : function(xhr) {
xhr.setRequestHeader(“Authorization”, “KakaoAK *************”);
}

하나는 해결 했는데 모르는 것들이 아직 많네요…ㅜㅜ
다음 지도 이용시 사용되던 값이 있는데요.
t_mapx(471991.0), t_mapy(448702.0)
주석을 보니 이 값이
’xxxxx 에서 얻어온 현재 접속 위치의 좌표값’
이렇게 설명이 되어 있더라구요.

카카오 맵에서 대체 되는 값이 있는지, 아님 다른 방법으로 현재 위치의 좌표값을 얻을 수 있는지 궁금합니다.

호출이 해결되었다니 다행이네요.

그런데 문의주신 url은 (문의글에서는 블라인드 처리했습니다) 외부 사용으로 제공되는 것이 아닌데 어디서 받아서 사용하신건가요?

저는 지금 시스템을 인수 받아 유지보수 중이라서 기존에 사용되고 있던 경로에 대해서는 정확히는 모르겠습니다. 아직 수정중(다음맵->카카오맵)이라서 운영에서는 아직도 해당 경로가 사용되고 있습니다.

말씀드렸듯이 t_mapx, t_mapy(예:471991.0, 448702.0) 값을 xxxxx 경로로 부터 받아서 /v2/local/geo/transcoord.json 파라미터(x, y) 값으로 넘기고,
위도, 경도 좌표값을 받아오고 있는 상황입니다.

그래서 카카오지도로 바꾸면서 mapx, mapy 값은 어떻게 받을 수 있는지 문의드렸던 것입니다.

그 정보는 받아서 사용하실 수 없습니다.
당사 자체 서비스만을 위한 것으로 외부에서 무단 사용 시 문제가 됩니다.
해당 코드는 제거해주세요.

지금 해당 경로를 없애고 t_mapx, t_mapy(예:471991.0, 448702.0) 값을 받을 수 있는 방법을 찾는 중이거든요.
방법이 있나요?