1.通過中間過渡層解決跨域問題
1)通過Web代理服務器將不同域的應用統一通過代理服務器進行隔離,所有的應用都在一個域名下面了。(比如apache,nginx等)
(2)跨域的安全限制都是指瀏覽器端來說的.服務器端是不存在跨域安全限制的,所以通過本機服務器端通過類似httpclient方式完成“跨域訪問”的工作。
2.通過<script>標籤解決跨域問題
注意:凡是擁有"src"這個屬性的標籤都擁有跨域的能力,比如<script>、<img>、<iframe>
示例:
前臺腳本:
Java代碼
<script type="text/javascript">
var flightHandler = function(data){
alert('你查詢的航班結果是:票價 ' + data.price + ' 元,' + '餘票 ' + data.tickets + ' 張。');
};
var url = "http://abc.com:8080/AjaxCrossDomain/data/data.jsp?code=CA1998&callback=flightHandler";
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
</script>
後臺data.jsp內容:
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String callback = request.getParameter("callback");
StringBuilder builder = new StringBuilder();
builder.append(callback).append("({").append("\"code\": \"CA1998\",").append("\"price\": 1780,").append("\"tickets\": 5").append("});");
out.println(builder.toString());
%>
使用jquery的jsonp來實現跨域訪問,例子如下:
<script type="text/javascript">
$(function(){
$.ajax({
type: "get",
async: false,
url: "http://abc.com:8080/AjaxCrossDomain/jsonp/data.jsp",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback:"flightHandler",
success: function(json){
alert('您查詢到航班信息:票價: ' + json.price + ' 元,餘票: ' + json.tickets + ' 張。');
},
error: function(){
alert('fail');
}
});
});
</script>