柚子快報(bào)激活碼778899分享:ajax 學(xué)習(xí) 筆記 JSON
HTTP(hypertext transport protocol)協(xié)議 【超文本傳輸協(xié)議】,協(xié)議詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間互相通信的規(guī)則。
2.2 HTTP 請(qǐng)求交互的基本過程
前后應(yīng)用從瀏覽器端向服務(wù)器發(fā)送HTTP 請(qǐng)求(請(qǐng)求報(bào)文) 后臺(tái)服務(wù)器接收到請(qǐng)求后, 調(diào)度服務(wù)器應(yīng)用處理請(qǐng)求, 向?yàn)g覽器端返回HTTP響應(yīng)(響應(yīng)報(bào)文) 瀏覽器端接收到響應(yīng), 解析顯示響應(yīng)體/調(diào)用監(jiān)視回調(diào)
2.3 HTTP 請(qǐng)求報(bào)文
重點(diǎn)是格式與參數(shù)
請(qǐng)求行 POST /s?ie=utf-8 HTTP/1.1
請(qǐng)求頭 Host: atguigu.com
cookie: name=guigu
content-type: application/x-www-form-urlencoded
…
空行
請(qǐng)求體 username=admin&password=admin
2.4 HTTP 響應(yīng)報(bào)文
響應(yīng)行 HTTP/1.1 200 OK
響應(yīng)頭 Content-Type:text/html;charset=utf-8
Content-length:2048
Content-encoding:gzip
空行
響應(yīng)體
2.5 谷歌瀏覽器調(diào)試
F12 打開控制臺(tái) 網(wǎng)絡(luò)欄:network /網(wǎng)絡(luò):這里有網(wǎng)頁加載所有發(fā)送的請(qǐng)求
4. 點(diǎn)擊查看源碼,可以看到完整的請(qǐng)求報(bào)文 和響應(yīng)報(bào)文
載荷:一些參數(shù),老師的在Headers里面,現(xiàn)在分離出來了,如果響應(yīng)有參數(shù),就在“標(biāo)頭”和“預(yù)覽”之間出現(xiàn)
6. '響應(yīng)’欄會(huì)返回頁面的HTML文件
3. 原生AJAX 的基本使用
3.1 安裝node.js
http://nodejs.cn/
3.2 安裝express(服務(wù)端框架)
https://www.expressjs.com.cn/
在編輯器中打開終端,輸入下面的代碼
初始化環(huán)境
npm init --yes
下載express包
npm install express --save
編寫js代碼(自己創(chuàng)建的js文件 ,這里我的是 express_use.js)
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
// request 是對(duì)請(qǐng)求報(bào)文的封裝
// response 是對(duì)響應(yīng)報(bào)文的封裝
app.get(‘/’, (request, response) => {
// 設(shè)置響應(yīng)
response.send(“Hello Express”);
});
// 4. 監(jiān)聽端口,啟動(dòng)服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
在終端運(yùn)行js程序
node express_use.js
網(wǎng)頁打開 http://127.0.0.1:8000/ 打開控制臺(tái)的網(wǎng)絡(luò),刷新頁面,
3.3 AJAX get案例
創(chuàng)建好文件夾和文件 開始編寫代碼
前端頁面的準(zhǔn)備
Ajax GET 請(qǐng)求
點(diǎn)擊發(fā)送請(qǐng)求
服務(wù)端準(zhǔn)備
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
app.get(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)體
response.send(“Hello Ajax”);
});
// 4. 監(jiān)聽服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
3.4 AJAX GET 請(qǐng)求設(shè)置請(qǐng)求參數(shù)
xhr.open(‘GET’, ‘http://127.0.0.1:8000/server?a=100&b=200&c=300’);
3.5 AJAX post案例
前端頁面
Ajax POST 請(qǐng)求
服務(wù)器代碼(修改為需要重啟服務(wù)器)
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
app.get(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)體
response.send(“Hello Ajax”);
});
app.post(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)體
response.send(“Hello Ajax”);
});
// 4. 監(jiān)聽服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
請(qǐng)求體
xhr.send('a=100&b=200&c=300');post設(shè)置請(qǐng)求體 request payload
3.6 AJAX設(shè)置請(qǐng)求頭信息
// 設(shè)置請(qǐng)求體內(nèi)容的類型
xhr.setRequestHeader(‘Content-Type’,‘a(chǎn)pplication/x-www-from-urlencoded’);
// 自定義頭信息
xhr.setRequestHeader(‘name’, ‘lightofD’);
server.js中設(shè)置響應(yīng)頭允許自定義請(qǐng)求頭 post改成all
服務(wù)器代碼:
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
app.get(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)體
response.send(“Hello Ajax”);
});
app.all(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)頭, 設(shè)置允許自定義頭信息
response.setHeader(‘Access-Control-Allow-Headers’,‘*’);
// 設(shè)置響應(yīng)體
response.send(“Hello Ajax”);
});
// 4. 監(jiān)聽服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
3.7 服務(wù)端響應(yīng)JSON數(shù)據(jù)
服務(wù)器代碼
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
app.all(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭, 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)頭, 設(shè)置允許自定義頭信息
response.setHeader(‘Access-Control-Allow-Headers’, ‘*’);
// 響應(yīng)一個(gè)數(shù)據(jù)
const data = {
name: ‘a(chǎn)tguigu’
};
// 對(duì) 對(duì)象 進(jìn)行 字符串 轉(zhuǎn)換 ;轉(zhuǎn)換為JSON格式
let str = JSON.stringify(data)
// 設(shè)置響應(yīng)體
response.send(str);
});
// 4. 監(jiān)聽服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
我們的頁面會(huì)接受到一個(gè)字符串
//設(shè)置響應(yīng)體數(shù)據(jù)的類型(自動(dòng)轉(zhuǎn)換)
xhr.responseType = ‘json’;
//設(shè)置之前 我們xhr.response接收到的是服務(wù)器的json格式字符串
//設(shè)置只后 xhr.response自動(dòng)根據(jù)這個(gè)字符串轉(zhuǎn)換為對(duì)象
//當(dāng)然我們也可以手動(dòng)轉(zhuǎn)換
// 1. 手動(dòng)對(duì)數(shù)據(jù)轉(zhuǎn)化 (字符串再轉(zhuǎn)換成json)
let data = JSON.parse(xhr.response); //轉(zhuǎn)換成json
//這個(gè)data 就是字符串對(duì)應(yīng)的對(duì)象了
//調(diào)用其中數(shù)據(jù)格式 data.name
html示例(鍵盤隨意輸入發(fā)送post請(qǐng)求)
JSON
3.8 nodemon自動(dòng)重啟工具
之前我們每次更改服務(wù)器端的代碼都需要重啟服務(wù)器,非常麻煩
有了這個(gè)工具,只要啟動(dòng)一次,我們修改服務(wù)端代碼,保存后自動(dòng)重啟服務(wù)器。
但是啟動(dòng)代碼的方式從 node 文件名 改為nodemon 文件名
安裝
npm install -g nodemon
啟動(dòng)
nodemon .\server.js
啟動(dòng)失敗怎么辦,運(yùn)行下條命令,一定要注意運(yùn)行所在路徑?。?!一定注意路徑!??!cd命令修改到server.js所在目錄
npx nodemon .\server.js
3.9 解決 IE 緩存問題
問題:在一些瀏覽器中(IE),由于緩存機(jī)制的存在,ajax 只會(huì)發(fā)送的第一次請(qǐng)求,剩余多次請(qǐng)求不會(huì)在發(fā)送給瀏覽器而是直接加載緩存中的數(shù)據(jù)。
解決方式:瀏覽器的緩存是根據(jù)url 地址來記錄的,所以我們只需要修改url 地址即可避免緩存問題
xhr.open(‘GET’, ‘http://127.0.0.1:8000/server?t=’+Date.now());
3.10 請(qǐng)求網(wǎng)絡(luò)超時(shí)與網(wǎng)絡(luò)異常
// 超時(shí)設(shè)置 (2秒)
xhr.timeout = 2000;
// 超時(shí)回調(diào)
xhr.ontimeout = function(){
alert(‘網(wǎng)絡(luò)超時(shí),請(qǐng)稍后重試’)
}
// 網(wǎng)絡(luò)異?;卣{(diào)
xhr.onerror = function(){
alert(‘網(wǎng)絡(luò)異常,請(qǐng)稍后重試’)
}
服務(wù)器模擬延遲效果
// 1. 引入express
const express = require(‘express’);
// 2. 創(chuàng)建應(yīng)用對(duì)象
const app = express();
// 3. 創(chuàng)建路由規(guī)則
app.all(‘/server’, (request, response) => {
// 設(shè)置響應(yīng)頭, 設(shè)置允許跨域
response.setHeader(‘Access-Control-Allow-Origin’, ‘*’);
// 設(shè)置響應(yīng)頭, 設(shè)置允許自定義頭信息
response.setHeader(‘Access-Control-Allow-Headers’, ‘*’);
// 響應(yīng)一個(gè)數(shù)據(jù)
setTimeout(()=>{
// 設(shè)置響應(yīng)體
response.send(‘str’);
},3000)
});
// 4. 監(jiān)聽服務(wù)
app.listen(8000, () => {
console.log(“服務(wù)已經(jīng)啟動(dòng), 8000 端口監(jiān)聽中…”);
})
瀏覽器模擬斷網(wǎng)
3.11 取消請(qǐng)求
// 手動(dòng)取消
xhr.abort()
3.12 重復(fù)請(qǐng)求問題
相當(dāng)于一個(gè)小的算法
JSON
發(fā)送
3.13 總結(jié)
XMLHttpRequest():創(chuàng)建 XHR 對(duì)象的構(gòu)造函數(shù) status:響應(yīng)狀態(tài)碼值,如 200、404 statusText:響應(yīng)狀態(tài)文本,如 ’ok‘、‘not found’ readyState:標(biāo)識(shí)請(qǐng)求狀態(tài)的只讀屬性 0-1-2-3-4 onreadystatechange:綁定 readyState 改變的監(jiān)聽 responseType:指定響應(yīng)數(shù)據(jù)類型,如果是 ‘json’,得到響應(yīng)后自動(dòng)解析響應(yīng) response:響應(yīng)體數(shù)據(jù),類型取決于 responseType 的指定 timeout:指定請(qǐng)求超時(shí)時(shí)間,默認(rèn)為 0 代表沒有限制 ontimeout:綁定超時(shí)的監(jiān)聽 onerror:綁定請(qǐng)求網(wǎng)絡(luò)錯(cuò)誤的監(jiān)聽 open():初始化一個(gè)請(qǐng)求,參數(shù)為:(method, url[, async]) send(data):發(fā)送請(qǐng)求 abort():中斷請(qǐng)求 (發(fā)出到返回之間) getResponseHeader(name):獲取指定名稱的響應(yīng)頭值 getAllResponseHeaders():獲取所有響應(yīng)頭組成的字符串 setRequestHeader(name, value):設(shè)置請(qǐng)求頭
4. jQuery 中的AJAX
4.1 get 請(qǐng)求
$.get(url, [data], [callback], [type])
url:請(qǐng)求的URL 地址 data:請(qǐng)求攜帶的參數(shù) callback:載入成功時(shí)回調(diào)函數(shù) type:設(shè)置返回內(nèi)容格式,xml, html, script, json, text, _default
4.2 post請(qǐng)求
$.post(url, [data], [callback], [type])
url:請(qǐng)求的URL 地址 data:請(qǐng)求攜帶的參數(shù) callback:載入成功時(shí)回調(diào)函數(shù) type:設(shè)置返回內(nèi)容格式,xml, html, script, json, text, _default
4.3通用方法
$.ajax({
// url
url: ‘http://127.0.0.1:8000/jquery-server’,
// 參數(shù)
data: {a:100, b:200},
// 請(qǐng)求類型
type: ‘GET’,
// 響應(yīng)體結(jié)果
dataType: ‘json’,
// 成功的回調(diào)
success: function(data){console.log(data);},
// 超時(shí)時(shí)間
timeout: 2000,
// 失敗的回調(diào)
error: function(){console.log(‘出錯(cuò)拉~’);},
// 頭信息
headers: {
c: 300,
d: 400
}
})
5.Axios 發(fā)送 Ajax 請(qǐng)求
5.1 get 請(qǐng)求
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ⅲ呵岸耍?/p>
更多面試題
**《350頁前端校招面試題精編解析大全》**內(nèi)容大綱主要包括 HTML,CSS,前端基礎(chǔ),前端核心,前端進(jìn)階,移動(dòng)端開發(fā),計(jì)算機(jī)基礎(chǔ),算法與數(shù)據(jù)結(jié)構(gòu),項(xiàng)目,職業(yè)發(fā)展等等
資料獲取方式:點(diǎn)擊藍(lán)色傳送門獲取
default
4.3通用方法
$.ajax({
// url
url: ‘http://127.0.0.1:8000/jquery-server’,
// 參數(shù)
data: {a:100, b:200},
// 請(qǐng)求類型
type: ‘GET’,
// 響應(yīng)體結(jié)果
dataType: ‘json’,
// 成功的回調(diào)
success: function(data){console.log(data);},
// 超時(shí)時(shí)間
timeout: 2000,
// 失敗的回調(diào)
error: function(){console.log(‘出錯(cuò)拉~’);},
// 頭信息
headers: {
c: 300,
d: 400
}
})
5.Axios 發(fā)送 Ajax 請(qǐng)求
5.1 get 請(qǐng)求
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
[外鏈圖片轉(zhuǎn)存中…(img-1Tcg3tKE-1712395748555)]
[外鏈圖片轉(zhuǎn)存中…(img-Ivr89Qkz-1712395748555)]
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識(shí)點(diǎn),真正體系化!
[外鏈圖片轉(zhuǎn)存中…(img-CbHzGhw2-1712395748555)]
由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。▊渥ⅲ呵岸耍?/p>
更多面試題
**《350頁前端校招面試題精編解析大全》**內(nèi)容大綱主要包括 HTML,CSS,前端基礎(chǔ),前端核心,前端進(jìn)階,移動(dòng)端開發(fā),計(jì)算機(jī)基礎(chǔ),算法與數(shù)據(jù)結(jié)構(gòu),項(xiàng)目,職業(yè)發(fā)展等等
資料獲取方式:點(diǎn)擊藍(lán)色傳送門獲取
[外鏈圖片轉(zhuǎn)存中…(img-HwDmngKq-1712395748556)]
柚子快報(bào)激活碼778899分享:ajax 學(xué)習(xí) 筆記 JSON
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。