<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
XMLHttpRequest(XHR)物件用於與伺服器互動。通過 XMLHttpRequest 可以在不重新整理頁面的情況下請求特定 URL,獲取資料。這允許網頁在不影響使用者操作的情況下,更新頁面的區域性內容。XMLHttpRequest 可以用於獲取任何型別的資料,而不僅僅是 XML。甚至支援 HTTP以外的協定(包括 file:// 和 FTP),儘管可能受到更多出於安全等原因的限制。
/** 1. 建立Ajax物件 **/ var xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');// 相容IE6及以下版本 /** 2. 設定 Ajax請求 **/ xhr.open('get', url, true) /** 3. 傳送請求 **/ xhr.send(null); // 嚴謹寫法 /** 4. 監聽請求,接受響應 **/ xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ success(xhr.responseText); } else { /** false **/ fail && fail(xhr.status); } } }
onreadystatechange:當 readyState 屬性發生變化時,呼叫的事件處理常式
readyState:
值 | 狀態 | 描述 |
---|---|---|
0 | UNSENT | 代理被建立,但尚未呼叫 open() 方法。 |
1 | OPENED | open() 方法已經被呼叫。 |
2 | HEADERS_RECEIVED | send() 方法已經被呼叫,並且頭部和狀態已經可獲得。 |
3 | LOADING | 下載中; responseText 屬性已經包含部分資料。 |
4 | DONE | 下載操作已完成。 |
response:返回的包含整個響應實體
responseText:返回一個DOMString,該 DOMString 包含對請求的響應,如果請求未成功或尚未傳送,則返回 null。
responseType:一個用於定義響應型別的列舉值(enumerated value)。
型別 | 解釋 |
---|---|
“ ” | 空的 responseType 字串與預設型別 "text" 相同。 |
"arraybuffer" | response 是一個包含二進位制資料的 JavaScript ArrayBuffer。 |
"blob" | response 是一個包含二進位制資料的 Blob 物件。 |
"document" | response 是一個 HTMLDocument或XMLDocument |
"json" | response是通過將接收到的資料內容解析為JSON的JS物件 |
"text" | response 是 DOMString 物件中的文字。 |
"ms-stream" | response是流式下載的一部分;此響應型別僅允許用於下載請求,並且僅受 Internet Explorer 支援。 |
status:返回一個無符號短整型(unsigned short)數位,代表請求的響應狀態。
var xhr = new XMLHttpRequest(); console.log('UNSENT', xhr.status); xhr.open('GET', '/server', true); console.log('OPENED', xhr.status); xhr.onprogress = function () { console.log('LOADING', xhr.status); }; xhr.onload = function () { console.log('DONE', xhr.status); }; xhr.send(null); /** * 輸出如下: * * UNSENT(未傳送) 0 * OPENED(已開啟) 0 * LOADING(載入中) 200 * DONE(完成) 200 */
withCredentials:一個布林值,用來指定跨域 Access-Control 請求是否應當帶有授權資訊,如 cookie 或授權 header 頭。xhr.withCredentials=true
upload:代表上傳進度
ajax 有那些優缺點?
優點:
缺點:
promise 封裝實現:
// promise 封裝實現: function getJSON(url) { // 建立一個 promise 物件 let promise = new Promise(function(resolve, reject) { let xhr = new XMLHttpRequest(); // 新建一個 http 請求 xhr.open("GET", url, true); // 設定狀態的監聽函數 xhr.onreadystatechange = function() { if (this.readyState !== 4) return; // 當請求成功或失敗時,改變 promise 的狀態 if (this.status === 200) { resolve(this.response); } else { reject(new Error(this.statusText)); } }; // 設定錯誤監聽函數 xhr.onerror = function() { reject(new Error(this.statusText)); }; // 設定響應的資料型別 xhr.responseType = "json"; // 設定請求頭資訊 xhr.setRequestHeader("Accept", "application/json"); // 傳送 http 請求 xhr.send(null); }); return promise; }
Ajax前後端資料通訊「同源、跨域」
// 使用者登入 -> 登入成功 -> 獲取使用者資訊 /* 回撥地獄 */ $.ajax({ url: 'http://127.0.0.1:8888/user/login', method: 'post', data: Qs.stringify({ account: '18310612838', password: md5('1234567890') }), success(result) { if (result.code === 0) { // 登入成功 $.ajax({ url: 'http://127.0.0.1:8888/user/list', method: 'get', success(result) { console.log(result); } }); } } });
優缺點:
Axios也是對ajax的封裝,基於Promise管理請求,解決回撥地獄問題
axios({ method: 'post', url: '/user/login', data: { username: 'name', password: 'password' } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); // 或使用 async await (async function () { let result1 = await axios.post('/user/login', { username: 'name', password: 'password' }); let result2 = await axios.get('/user/list'); console.log(result1, result2); })();
優缺點:
Fetch是ES6新增的通訊方法,不是ajax,但是他本身實現資料通訊,就是基於promise管理的
try { let response = await fetch(url, options); let data = response.json(); console.log(data); } catch(e) { console.log("Oops, error", e); }
範例:
(async function () { let result = await fetch('http://127.0.0.1:8888/user/login', { method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: Qs.stringify({ name: 'name', password: 'password' }) }) let data = result.json(); console.log(data) let result2 = await fetch('http://127.0.0.1:8888/user/list').then(response => { return response.json(); }); console.log(result2); })();
優缺點:
axios 是一個基於Promise 用於瀏覽器和 nodejs 的 HTTP 使用者端,它本身具有以下特徵:
三選一絕必是axios了。其流程圖如下:
到此這篇關於AJAX原理以及axios、fetch區別的文章就介紹到這了,更多相關AJAX原理 axios、fetch區別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45