jQuery 跨域訪問問題解決方法

2022-04-15 07:26:23 字數 2116 閱讀 8446

瀏覽器端跨域訪問一直是個問題, 多數研發人員對待js的態度都是好了傷疤忘了疼,所以病發的時候,時不時地都要疼上一疼.記得很久以前使用iframe 加script domain 宣告,yahoo js util 的方式解決二級網域名稱跨域訪問的問題.

時間過得好快,又被拉回js戰場時, 跨域問題這個傷疤又開疼了. 

好在,有jquery幫忙,跨域問題似乎沒那麼難纏了.這次也藉此機會對跨域問題來給刨根問底,結合實際的開發專案,查閱了相關資料,算是解決了跨域問題..有必要記下來備忘. 

跨域的安全限制都是指瀏覽器端來說的.伺服器端是不存在跨域安全限制的, 

所以通過本機伺服器端通過類似httpclient方式完成「跨域訪問」的工作,然後在瀏覽器端用ajax獲取本機伺服器端「跨域訪問」對應的url.來間接完成跨域訪問也是可以的.但很顯然開發量比較大,但限制也最少,很多widget開放平台server端(如sohu部落格開放平台)其實就麼搞的.不在本次討論範圍. 

要討論的是瀏覽器端的真正跨域訪問,推薦的是目前jquery $.ajax()支援get方式的跨域,這其實是採用jsonp的方式來完成的. 

真實案例: 

複製****如下:

注意:$.getjson(" http://跨域的dns/document!searchjsonresult.action?name1="+value1+"&jsoncallback=?", 

function(json) 

}); 

這種方式其實是上例$.ajax() api的一種高階封裝,有些$.ajax api底層的引數就被封裝而不可見了. 

這樣,jquery就會拼裝成如下的url get請求 

http://跨域的dns/document!searchjsonresult.action?&jsoncallback=jsonp1236827957501&_=1236828192549&searchword=%e7%94%a8%e4%be%8b¤tuserid=5351&conditionbean.pagesize=15 

在響應端(http://跨域的dns/document!searchjsonresult.action), 

通過 jsoncallback = request.getparameter("jsoncallback") 得到jquery端隨後要**的js function name:jsonp1236827957501 

然後 response的內容為乙個script tags:"jsonp1236827957501("+按請求引數生成的json陣列+")"; 

jquery就會通過**方法動態載入呼叫這個js tag:jsonp1236827957501(json陣列); 

這樣就達到了跨域資料交換的目的. 

jsonp的最基本的原理是:動態新增乙個是一致的(qq空間就是大量採用這種方式來實現跨域資料交換的) .jsonp是一種指令碼注入(script injection)行為,所以也有一定的安全隱患. 

注意,jquey是不支援post方式跨域的. 

為什麼呢? 

雖然採用post +動態生成iframe是可以達到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是乙個比較極端的方式,不建議採用. 

也可以說get方式的跨域是合法的,post方式從安全角度上,被認為是不合法的, 萬不得已還是不要劍走偏鋒.. 

client端跨域訪問的需求看來也引起w3c的注意了,看資料說html5 websocket標準支援跨域的資料交換,應該也是乙個將來可選的跨域資料交換的解決方案.

您可能感興趣的文章:

qq空間

人人網開心網

更多17

tags:jquery

跨域訪問

收藏本文

列印本文

關閉本文

返回首頁

摘自:

js 跨域訪問問題解決方法

js 跨域訪問問題解決方法 什麼引起了ajax不能跨域請求的問題?ajax本身實際上是通過xmlhttprequest物件來進行資料的互動,而瀏覽器出於安全考慮,不允許js 進行跨域操作,所以會警告。有什麼完美的解決方案麼?解決方案有不少,但是只能是根據自己的實際情況來選擇。跨域的安全限制都是指瀏覽...

跨域訪問問題

瀏覽器跨域 跨域問題 於瀏覽器的同源策略,瀏覽器為了提高 的安全性,在傳送ajax請求時,只有在當前頁面位址與請求位址的協議 網域名稱 埠號相同時才允許訪問,否則會被攔截。協議即通訊協議,比如我們現在常見的http和https,如果當前頁面位址使用http協議,請求的位址使用https協議,那麼這個...

angularjs 跨域訪問問題

最近使用angular js 訪問restful 後台時需要考慮cors跨域訪問的問題,angular js 的http訪問本身也是ajax,在跨域訪問時需要做響應的設定 1.伺服器端設定 當跨域訪問時,伺服器端需要設定響應的header,access control allow origin 表示...