Ajax的跨域問題

2021-08-30 18:16:27 字數 1709 閱讀 1990

在專案中遇到乙個問題,與ajax的跨域相關,具體問題描述如下:

在客戶端的js,使用ajax和伺服器進行互動,出現的是

access to restricted uri denied" code: "1012

[break on this error] ajaxreq.open("get",filename);

問題,如果此html以及js檔案放到伺服器端,則不會出現問題,就是ajax跨域問題。但是此專案的需求不能將此html及js檔案放到伺服器端,只能放到本地,從網上檢視了很多資料,感覺在本地搭建乙個伺服器比較靠譜,將html放到本地伺服器(這樣可以進行一些本地操作,比如讀本地的檔案),這樣架構就變成這樣了:

對於ajax跨域的問題,通過網上的資料學習,現總結如下:

1.什麼引起了ajax跨域問題

ajax本身是通過xmlhttprequest物件來進行資料的互動,而瀏覽器處於安全的考慮,不允許js**進行跨域操作,所以會警告。

2.解決方案需要根據具體情況具體解決

一 、本域和子域的相互互訪:www.aa.com和book.aa.com

二、本域和其他域的訪問:www.aa.com和www.bb.com用ifram

三、本域和其他域的相互訪問:www.aaa.com和www.bb.com用xmlhttprequest訪問**

四、本域和其他域的訪問:www.aa.com和www.bb.com,用js建立動態指令碼。

解決方法:

一,對於www.aa.com和book.aa.com,可以將book.aa.com用iframe新增到www.aa.com的某個頁面下,在www.aa.com和ifram裡面都加上document.domain = "aa.com",這樣就可以統一域了,直接呼叫js即可。

二、可以使用window.location物件的hash屬性。這個感覺有點亂。hash屬性就是http://domain/web/a.htm#dsha裡面#後面的部分。利用js改變hash網頁不會重新整理,可以這樣通過js訪問hash值來做到通訊。大體的過程是頁面a和頁面b在不同域下,b通過iframe新增到a裡,a通過js修改iframe的hash值,b裡面做乙個監聽(應為js只能修改hash,資料是否改變只能由b自己來判斷),檢測到b的hash值被修改了,得到修改的值,經過處理返回a需要的值,再來修改a的hash值,同樣a裡面也要做監聽,如果hash變化的話就取得返回

三、www.aa.com和www.bb.com,假如說你要取得資料就訪問某某鏈結引數是什麼樣子的等等,最後返回的資料是什麼格式的,而你需要做的就是在你的域下(www.aa.com)新建乙個網頁,讓伺服器去別人的**上獲取資料,再返回給你。比如domain1的a向同域下的routeservlet請求資料,routeservlet向domain2下的getrouteservlet傳送請求,domain2將資料返回給routeservlet,routeservlet再返回給a,這樣就完成了一次資料請求,routesrevlet在當中充當了**的作用。

四、這個是用標籤來請求的,原理就是js檔案注入,在本域內的a內生成乙個js標籤,他的src指向請求的另外乙個域的某個頁面b,b返回資料即可。

簡單來說,

第一種情況:域和子域的問題,可以完全解決互動。

第二種情況:跨域,實現過程比較複雜,需要兩個域的開發者都能控制,適用於簡單互動。

第三種情況:跨域,開發者只控制乙個域即可,實現過程需要增加**取得資料,是常用的方式。

第四種情況:跨域,兩個域開發者都需要控制,返回一段js**。

ajax跨域問題

ajax跨域和js的跨域通訊 cross the site 的幾種解決方案 1.什麼引起了ajax跨域不能的問題 ajax本身實際上是通過xmlhttprequest物件來進行資料的互動,而瀏覽器出於安全考慮,不允許js 進行跨域操作,所以會警告。2.有什麼完美的解決方案麼?沒有。解決方案有不少,但...

Ajax跨域問題

跨域是指跨網域名稱的訪問,以下情況都屬於跨域 跨域原因說明 示例網域名稱不同 www.jd.com與www.taobao.com 網域名稱相同,埠不同 www.jd.com 8080與www.jd.com 8081 二級網域名稱不同 item.jd.com與miaosha.jd.com 如果網域名稱...

ajax跨域問題

首先什麼是跨域,產生跨域的條件是什麼。在軟體的開發過程中,我們可能會遇到這這樣的問題,瀏覽器會報這樣的錯誤。這種其實就是跨域問題,但是,是什麼原因造成的這個問題呢,造成這個問題有三種方式,如下 請求的埠和當前伺服器不同 例如localhost 8080和localhost 8081 請求屬於同一網域...