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