Home Of Java------ChenDong
阿新 • • 發佈:2018-12-22
近期開發過程中遇到了跨域的問題,趁著空暇時間,做一下消化整理,希望能夠掌握這方面的知識,也希望能得到大眾的指點。
在理解跨域之前,要弄懂一點,究竟什麼會導致跨域,以前認為,在一個域名的系統中去訪問另一個域名的系統就是跨域,這是錯誤的,跨域不僅僅是開啟另一個域名的網站而已,而是去操作,去操作另一個域名系統的內容,才會導致跨域,比如在本系統中,去增加另一個域名下系統的一條資料,或者取出一條記錄,這才是跨域,單純的一個連結,上面寫著另一個域名的地址,那不叫跨域,而是開啟。
跨域分為一級跨域和二級跨域,如果是例如aaa.xxx.com與bbb.xxx.com就是二級跨域,xxx.aaa.com與xxx.bbb.com就是一級跨域;
HttpClient與JsonP能夠輕易的解決跨域問題,從而得到自己想要的資料,唯一的不同點是,HttpClient是在java程式碼中進行跨域訪問,而JsonP是在js中進行跨域訪問,在此,我們團隊對HttpClient進行了再一次的封裝,從而進行方便的使用,可以通過org.apache.commons.httpclient原始碼包進行分析學習。
public static Document mycoll(String page,String rows,String userEname, String title,String sysname,String objtype,String objid) { String url = PropertyUtil.getValueByProperty("webservice_chat_url"); String sysid = PropertyUtil.getValueByProperty("sysid"); String split = getSplit(url); String serverName = url + split + "web/mycoll"; NameValuePair[] paras = new NameValuePair[8]; paras[0] = new NameValuePair("page", StrUtil.doNull(page, "")); paras[1] = new NameValuePair("rows", StrUtil.doNull(rows, "")); paras[2] = new NameValuePair("userEname", StrUtil.doNull(userEname, "")); paras[3] = new NameValuePair("title", StrUtil.doNull(title, "")); paras[4] = new NameValuePair("sysname", StrUtil.doNull(sysname, "")); paras[5] = new NameValuePair("objtype", StrUtil.doNull(objtype, "")); paras[6] = new NameValuePair("objid", StrUtil.doNull(objid, "")); paras[7] = new NameValuePair("sysid", StrUtil.doNull(sysid, "")); Document doc = PostHttp.postHttpDocument(serverName, paras); return doc; }
後臺返回XML資料。
- <script type="text/javascript" src="jquery.js"></script>
- <script type="text/javascript">
- $.ajax({
- url:"http://crossdomain.com/services.php",
- dataType:'jsonp',
- data:'',
- jsonp:'callback',
- success:function(result) {
-
for
- alert(i+":"+result[i]);//迴圈輸出a:1,b:2,etc.
- }
- },
- timeout:3000
- });
- </script>