문제점
다음과 같이 ajax로 다른 페이지에 접급하려할 때 에러가 발생하였다.
source
$.ajax( { type: "GET", contentType: 'text/xml', dataType: "xml", url: 'url address', timeout: 4000, async: false, success: parseXml, });
error message
XMLHttpRequest cannot load http://xx.xx.xx.xx/xxx. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
원인은 ajax로 외부 서버에 접속하려 할 경우에 보안상의 문제 때문이라고 한다. 해결방법에는 여러가지가 있다.
해결방안
이것저것 며칠을 찾아보면서 찾은 각종 해결방법은 아래와 같다.
- PHP
header("Access-Control-Allow-Origin: *");
- JSP
<% response.addHeader("Access-Control-Allow-Origin", "*"); %>
- ajax
dataType의 값을 jsonp로 변경한다.$.ajax( { type: "GET", contentType: 'text/xml', dataType: "jsonp", url: 'url address', //timeout: 4000, async: false, success: parseXml, });
- open source
homepage, github - With jQuery and the Google AJAX Feed API
$.ajax({ url : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(FEED_URL), dataType : 'json', success : function (data) { if (data.responseData.feed && data.responseData.feed.entries) { $.each(data.responseData.feed.entries, function (i, e) { console.log("------------------------"); console.log("title : " + e.title); console.log("author : " + e.author); console.log("description: " + e.description); }); } } });