最近工作需要用到ajax跨域請求參數,網上找很很久,最終得到解決之道。分享一下吧,希望能幫到各位
也許你已經發現在瀏覽器直接敲路徑能獲得對方提供接口的參數,而一到項目中Ajax請求卻老是失敗。原因是,瀏覽器出於安全考慮,是不允許JavaScript代碼進行跨域操作。
話不多說,直入正題:
據我所知,解決ajax跨域請求問題有3種,
1).直接用一個java類向跨域項目請求參數,然后Ajax只想自己項目的對應java類發送請求。
你想到了嗎 ? 呵呵
這個夠簡單了,而且可以實現,但是這樣做的我們自己也會覺得這樣的方式怪“慫”的。
相面看第二中方法
2).
這中方式主要是通過JS和Java類的一個配合,條件是提供接口方必須與請求方關系緊密,要不人家可願意為了你的需求來改動接口類
JS方面:
- $.getJSON("http://www.forwhat.com?jsoncallback=?",
- function(data){
- alert(data);
- });
Java Code:
- String jsoncallback=request.getParameter("jsoncallback");
- //與請求中jsoncallback對應
- ...
- out.print(jsoncallback+"("+
- "Message"
- +")");
正種方式的關鍵在於如下:
1、請求地址加參數:jsoncallback=?
2、服務器段把jsoncallback的值作為方法名傳回來,如JQUET098788(...)
3).
第三種方式
AJAXCDR:利用 Flash 完美解決 JavaScript 和 AJAX 跨域 HTTP POST/GET表單請求
這種方式比較強大,即不用懂java類也不需要對象的配合。
這種方式瀏覽器兼容性好,支持IE、Firefox、谷歌Chrome等多種瀏覽器。
條件是需要其他域的根目錄下有一個crossdomain.xml文件,文件中設置允許所有域名或允許本域訪問即可。
crossdomain.xml 文件為:http://api.bz/crossdomain.xml,不需要改動。
AJAXCDR下載地址: http://blog.s135.com/demo/ajaxcdr/ajaxcdr-1.0.zip
AJAXCDR 擁有兩個文件:ajaxcdr.js 和 ajaxcdr.swf,下載后需要在ajaxcdr.js中配置ajaxcdr.swf的路徑,不詳說了,相信這個難不倒你。
AJAXCDR 擁有一個 JavaScript 函數 AjaxCrossDomainRequest() 和一個全局變量 AjaxCrossDomainResponse。
下面是我的例子
- <form name="cross_domain_demo">
- <input name="title" type="text" value="">
- </form>
- <a href="javascript:AjaxCrossDomainRequest('"http://www.forwhat.com', 'POST', 'cross_domain_demo', 'callbacktome()');">Submit</a>
- <script type="text/javascript">
- function callbacktome(){
- alert(AjaxCrossDomainResponse);
- }
- </script>
- <script type="text/javascript" src="/demo/ajaxcdr/ajaxcdr.js"></script>
這種方式看起來大費周折,但是如果跨域情況多的話,可以采用。很不錯的 。
第一篇技術性文章,如有不妥之處,希望大蝦們能慷慨指出 。