공부해요/JSP

ajax으로 외부데이터 읽어오는데 불안정함

예쁜꽃이피었으면 2018. 4. 23. 14:22


jsp에서 ajax을 사용해서 외부데이터를 xml로 받아오는데 

No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http//localhost.com is therefore not allowed access. 이런 에러 였나.. 

무튼 크로스 도메인 문제가 생겨서 데이터를 보내주는 서버에 우리 서버 도메인 등록하고.. 데이터를 받아올 수 있었다.

근데 데이터가 오긴 오는데.. 너무 불안정해서 도저희 쓸 수가 없었다.


요청 url만 접근했을 때는 분명 데이터가 있는데 

로그인 여부,  pc에 따라, 브라우저마다 다르게 ... 데이터를 불안정하게 받아와서 같은 pc에서도 보였다 안보였다 해서 문제가 됐었다...



방법을 찾다가 

https://okky.kr/article/284936  여기 글을 읽고 따라해 봤다.



제 경우는 외부 API를 제공해주는 측에 jsonp로 달라고 요청했더니 배째라 이렇게 나와서 ㅡㅡ;;

jsp 외부 페이지 인클루드를 이용했었습니다.


<c:import url="http://www.naver.com/" />

이런 방식으로 우리측 jsp 파일 안에 불러들여서 해결했습니다.

꼼수지만 저렇게 하면 same origin 취급이 되더라고요.




말로 설명을 드리자면, jsp 페이지에

<%@ page language="java" contentType="application/json;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:import url="외부 api 주소" />

딱 저 세줄만 해놓고 ajax로 불러들이는 url은 그 jsp의 주소를 사용했습니다.

jQuery ajax에서 dataType은 그냥 json으로 두시면 됩니다.





처음 이글이 봤을 때 뭔소리지??했는데 다시 보니. 

데이터를 한번에 읽어오지 말고 내 프로젝트내의 다른 곳에서 받아온 데이터를 필요한 곳에서 읽어서 쓰라는 소리였다..

그러니까 

기존에는 내가 

main.jsp에서 ajax을 써서 바로 해당url에 접근을 했다면



mina.jsp에서 ajax호출시 temp.jsp에 접근을 하고 

temp.jsp에는 해당 url을 호출하여 받은 데이터를 가지고 있으면 된다.



글로는 ..설명이 안되는데..


1.main.jsp

..

 $.ajax({

    type:'get',

    url: "/temp.jsp?intyear="+currentYear+"&intmonth="+currentMonth,

..


+ 검색시 필요한 데이터가 있어서 함께 넘겼다.





2.temp.jsp


<%@page language="java" contentType="text/xml;charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page trimDirectiveWhitespaces="true" %> <- 이건 공백이 있어서 xml로 인식이 안되서 공백을 모두 제거시킴

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>



<%

String intyear =(String)request.getParameter("intyear");

String intmonth =(String)request.getParameter("intmonth");

String ScheduleUrl = "http://..해당url?intyear="+intyear+"&intmonth="+intmonth;

%> 

<c:import url="<%=ScheduleUrl%>"/>









반응형