Ajax第二課學習(小案例實踐)
阿新 • • 發佈:2020-12-28
技術標籤:Ajax
需求:get請求點選按鈕發請求,講請求回來的資料呈現到div中
例如:
一開始沒資料:
點選按鈕之後:
頁面程式碼如下:
<title>Ajax get請求</title>
<style>
#result {
width: 200px;
height: 100px;
border: 1px solid green;
}
</style>
</head>
<body>
<!-- 需求:點選按鈕,傳送請求,將請求回來的資料呈現在div裡 -- >
<div id="result"></div><br>
<button id="btn">點擊發送請求</button>
<script>
//獲取元素
const btn = document.getElementById('btn')
const result = document.getElementById('result')
btn.onclick = () => {
//建立物件
const xhr = new XMLHttpRequest()
//初始化 設定方法和url
xhr.open('GET', 'http://127.0.0.1:8000/getServer?id =007&name=a')//get傳送請求並傳參
xhr.send()
//事件繫結,處理服務端返回的結果
//onreadystatechange解讀:on是當····什麼時候,表示一個時間上的待定,
//readystate是 xhr 物件中的屬性,它有5個值表示狀態:0(未初始化,一開始的值就是0) ,1(表示open方法呼叫完畢),2(表示send方法呼叫完畢),3(表示服務端返回部分結果),4(表示服務端返回全部結果)
//change是改變
xhr.onreadystatechange = () => {
//判斷伺服器是不是返回全部結果,如果是就繼續執行
// if (xhr.readyState === 4) {
//還要判斷響應狀態碼:200 404 403 401 500
//以2開頭的就是成功的
if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status < 300) {
//處理結果 行(協議版本 狀態碼 狀態字串) 頭 空行 體
//xhr.status 儲存的是響應狀態碼
//xhr.statusText 儲存的是響應狀態字串
//xhr.getAllResponseHeader 儲存的是所有響應頭
//xhr.response 儲存的是響應體
console.log('響應狀態碼', xhr.status);
console.log('狀態字串態碼', xhr.statusText);
console.log('響應頭', xhr.getAllResponseHeader);
console.log('響應體', xhr.response);
result.innerHTML = xhr.response
// }
}
}
}
</script>
</body>
服務端程式碼如下:
//1.引入express
const { request, response } = require('express')
const express = require('express')
//2.建立應用物件
const app = express()
//建立路由規則
// request是對請求報文的封裝
// response是對響應報文的封裝
app.get('/getServer', (request, response) => {
//設定響應頭 響應體名字Access-Control-All-Origin , *號是設定允許跨域
response.setHeader('Access-Control-Allow-Origin', '*')
//設定響應體
response.send('Hello AJAX')
})
//監聽埠啟動服務
app.listen(8000, () => {
console.log('服務已經啟動,8000 埠監聽中');
})
2.post請求,需求:把滑鼠移動到div,div裡面顯示請求回來的內容,移開就不顯示
思路其實跟get請求差不多,只是把伺服器的get換乘post或者all,all是兩種相容
頁面程式碼:
<body>
<!-- 當滑鼠移動到div時。顯示請求回來的內容 -->
<div id="result"></div>
<script>
const result = document.getElementById('result')
result.onmouseover = () => {
const xhr = new XMLHttpRequest() //建立例項
xhr.open('post', 'http://127.0.0.1:8000/postServer')//傳送請求
xhr.send("id=007&name=a") //post傳參
xhr.onreadystatechange = () => {//與伺服器進行資料互動
if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status < 300) {
result.innerHTML = xhr.response
}
}
}
result.onmouseout = () => {
result.innerHTML = ''
}
</script>
</body>
服務端程式碼:
//1.引入express
const { request, response } = require('express')
const express = require('express')
//2.建立應用物件
const app = express()
//建立路由規則
// request是對請求報文的封裝
// response是對響應報文的封裝
app.all('/postServer', (request, response) => {
//設定響應頭
response.setHeader('Access-Control-Allow-Origin', '*')
response.send('Hello 我是post請求')
})
//監聽埠啟動服務
app.listen(8000, () => {
console.log('服務已經啟動,8000 埠監聽中');
})
效果圖:
一開始:
滑鼠移動到div:
移走之後就又消失了