首先什么是AJAX?
?????????AJAX : Asynchronous JavaScript and XML(異步JavaScript和XML技術(shù))桂肌。
????????JavaScript:XMLHttpRequest(核心對象)轴或。
????????XML:可擴(kuò)展標(biāo)記語言仰禀,數(shù)據(jù)存儲與交換。
????????是在不重新加載(刷新)整個(gè)頁面的情況下饺蚊,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的內(nèi)容。
? ? ? ? 優(yōu)缺點(diǎn):無刷新技術(shù)裕坊,提升用戶體驗(yàn)燕酷,減少網(wǎng)絡(luò)占用;不利于SEO優(yōu)化饵蒂。
步驟:
? ? ? ? 1. 創(chuàng)建核心對象
????????????????var xhr = new XMLHttpRequest();
? ? ? ? 2. 準(zhǔn)備建立連接
????????????????xhr.open(method, url, async);
????????????????method -- 請求方式:"GET"/"POST"
????????????????url -- 請求資源的URL
????????????????async -- 是否異步退盯,通常 true(異步)泻肯,如果設(shè)置為 false表示是同步
? ? ? ? ? 3. 發(fā)送請求
????????????????xhr.send();
? ? ? ? ? 4. 處理響應(yīng)
????????????????xhr.onreadystatechange = function(){}
????????????????xhr.readyState -- 就緒狀態(tài)碼
????????????????-- 表示 xhr 狀態(tài)信息,即請求到達(dá)哪個(gè)階段
????????????????-- 4 :請求處理完畢琉朽,響應(yīng)就緒
????????????????xhr.status -- HTTP 狀態(tài)碼
????????????????-- 200 :OK稚铣,請求成功
????????????????xhr.responseText -- 獲取響應(yīng)文本
就緒狀態(tài)碼:
????????0: 請求未初始化
????????1: 服務(wù)器連接已建立
????????2: 請求已接收
????????3: 請求處理中
????????4: 請求已完成榛泛,且響應(yīng)已就緒
常用HTTP:
? ??????1**——信息,服務(wù)器收到請求孤个,需要請求者繼續(xù)執(zhí)行操作
????????2**——成功沛简,操作被成功接收并處理
????????3**——重定向,需要進(jìn)一步的操作以完成請求
????????4**——客戶端錯(cuò)誤给郊,請求包含語法錯(cuò)誤或無法完成請求
? ? ? ? 5**——服務(wù)器錯(cuò)誤,服務(wù)器在處理請求的過程中發(fā)生了錯(cuò)誤
????????說跨域前需要先說說同源策略
同源策略:
????????瀏覽器安全策略淆九,保障非同源資源之間數(shù)據(jù)訪問的安全性炭庙。
????????默認(rèn)不允許非同源的資源直接訪問。
????????URL:協(xié)議://域名:端口/路徑名稱?查詢字符串#hash
????????同源:協(xié)議逾雄、域名、端口完全一致鸦泳,只要三個(gè)中有任何一個(gè)不一致永品,則是非同源
????????非同源資源間需要進(jìn)行訪問,則需要實(shí)現(xiàn)跨域。
跨域方法一:CORS跨域
? ? ? ? CORS跨域比較簡單硅则,只需要后端在PHP文件頭部加一個(gè)頭信息及:
? ??????????????header('Access-Control-Allow-Origin:*')堪置;
? ? ? ? *表示允許所有域名訪問,如果只是一個(gè)文件訪問則吧*換成指定域名乎芳。
? ??????可解決GET/POST跨域需求
跨域方法二:JSONP跨域
????????利用<script>在引入外部JS時(shí)不受同源策略限制的特性,同時(shí)包含JSON編碼數(shù)據(jù)的響應(yīng)體會自動解碼吭净,來實(shí)現(xiàn)跨域肴甸。JSONP處理的是GET請求方式的跨域
步驟:
? ??????后端:
????????????????有服務(wù)器端構(gòu)建一個(gè)字符串:字符串中的內(nèi)容是能夠在 JS 中執(zhí)行的函數(shù)調(diào)用的結(jié)構(gòu)
????????前端:
????????????????1. 創(chuàng)建 元素
????????????????2. 設(shè)置 src 屬性,傳遞 callback 參數(shù)指明全局回調(diào)函數(shù)的名稱
????????????????3. 添加到 body 中
????????????????4. 創(chuàng)建全局函數(shù)友扰,用于處理響應(yīng)數(shù)據(jù)
????????????????5. 刪除 元素
? ? ? ??