国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

ajax與跨域

2024-04-27 15:14:31
字體:
來源:轉載
供稿:網友

原生的Ajax實現方式

是通過xmlHttPRequest對象來實現的,該對象包含了一些方法來進行請求的發送、監聽請求過程中的狀態、接收響應內容等:

var xhr = new xmlhttpRequest();xhr.onReadyStateChange = function() { if (xhr.readyState === 4) { //不使用this更靠譜 if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ alert(xhr.responseText); }};xhr.open('get', 'url', true);xhr.setRequestHeader('name', 'value');xhr.send(null); //不發送任何內容必須使用null

readyState 共有5種狀態,在此一一不作說明。其中4 表示已接收到所有的響應內容。readyStateChange 事件綁定需要在open 方法調用之前。setRequestHeader 方法需要在opensend 之間調用。

此外,如果需要在url上加參數,必須使用encodeURIComponent 來對參數的namevalue 進行編碼。encodeURIComponent只能使用UTF-8編碼格式.

插播一下URL編碼:

RFC 1738規定:

“只有字母和數字[0-9a-zA-Z]、一些特殊符號”$-_.+!*’(),”[不包括雙引號]、以及某些保留字,才可以不經過編碼直接用于URL?!?

而不同的操作系統、不同的瀏覽器、不同的網頁字符集,將導致完全不同的編碼結果。并且URL本身和后面追加的查詢參數的編碼方式很可能不同。這樣會比較混亂,因此可以提前使用JS對URL進行編碼,使得統一,而不直接通過瀏覽器。

參考: 關于URL編碼 url的三個js編碼函數escape(),encodeURI(),encodeURIComponent()簡介

跨域

當異步請求地址的協議、主域名、子域名(例如www)、端口號中有任何一個同源頁面不同,則是一次跨域請求。

跨域資源共享

CORS是W3C的一個工作草案。是通過頭部來進行瀏覽器和服務器間的溝通。 通過設置自定義頭部Origin,該頭部內容為請求源的地址和端口號。服務器如果接收請求,則會在access-Control-Allow-Origin 相應頭部中返回與Origin 相同內容或者* (公共資源)。如果不接受,則不返回該頭部或者頭部不匹配。瀏覽器就會駁回該請求。

現代瀏覽器已經通過原生的xhr對象實現了跨域請求(IE10+)。使用方式和同源的沒什么區別,當瀏覽器發現ajax進行跨域后,會自動添加一些請求頭部。主要需要服務器實現CORS接口。 但跨域xhr對象也有一些使用上的限制。 同時,跨域請求分為簡單請求和非簡單請求,當為非簡單請求時,預先發送一個option 類型的請求進行預檢(preflight),服務器通過后,瀏覽器才會發送真正的請求(和簡單請求一樣)。

參考: 跨域資源共享 CORS 詳解

JSONP

跨域資源共享方式比JSONP更強大,前者支持所有請求方式,而后者只支持GET 。不過JSONP對于那些不支持CORS的瀏覽器來說是實現跨域的一種方式。 JSONP的實現原理是src 是不受同源策略限制的,當script標簽出現在文檔樹種時,會請求一段JS代碼,獲取到該代碼后立即執行。 需要前端和服務端之間約定好callback的字段名(即下例中的callbackName),方便后端取到回調函數,并用將數據作為參數傳遞給回調函數然后返回這個回調函數,頁面在獲取到這個回調函數后會立即執行。 前端需要做的:

//1. 聲明一個回調函數function callback(data) { //deal with data}//2. 動態生成一個script標簽并插入文檔樹var script = document.createElement('script');script.src = 'http://write.blog.csdn.net?callbackName=callback';document.getElementsByTagName("head")[0].appendChild(script);

還有一些其他跨域方式: 前端跨域的整理

訪問未聲明的變量會報錯,但訪問不存在的對象的屬性不會報錯,返回undefined


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万源市| 宜川县| 应用必备| 寻乌县| 多伦县| 阳曲县| 海原县| 仙游县| 班玛县| 德安县| 九龙县| 神农架林区| 巴林左旗| 宁乡县| 日喀则市| 景泰县| 巴彦淖尔市| 承德县| 茶陵县| 怀来县| 宁阳县| 永靖县| 微山县| 白玉县| 宜兰县| 慈溪市| 英山县| 拉萨市| 大方县| 临潭县| 佛坪县| 迭部县| 夏邑县| 凤凰县| 茌平县| 广河县| 工布江达县| 洛隆县| 大邑县| 苗栗市| 波密县|