Ajax(黑馬學習筆記)

Ajax介紹

Ajax概述

我們前端頁面中的數據,如下圖所示的表格中的學生信息,應該來自于后臺,那么我們的后臺和前端是互不影響的2個程序,那么我們前端應該如何從后臺獲取數據呢?因為是2個程序,所以必須涉及到2個程序的交互,所以這就需要用到我們接下來學習的Ajax技術。

Ajax:全稱Asynchronous JavaScript And XML,異步的JavaScript和XML。其作用有如下2點:

● 與服務器進行數據交換:通過Ajax可以給服務器發送請求,并獲取服務器響應的數據。

● 異步交互:可以在不重新加載整個頁面的情況下,與服務器交換數據并更新部分網頁的技術,如:搜索聯想、用戶名是否可用的校驗等等。

Ajax作用

我們詳細的解釋一下Ajax技術的2個作用

● 與服務器進行數據交互

如下圖所示前端資源被瀏覽器解析,但是前端頁面上缺少數據,前端可以通過Ajax技術,向后臺服務器發起請求,后臺服務器接受到前端的請求,從數據庫中獲取前段需要的資源,然后響應給前端,前端在通過我們學習的vue技術,可以將數據展示到頁面上,這樣用戶就能看到完整的頁面了。此處可以對比JavaSE中的網絡網絡編程技術來理解。

● 異步交互:可以在不重新加載整個頁面的情況下,與服務器交換數據并更新部分網頁的技術。

如下圖所示,當我們在百度搜索java時,下面的聯想數據時通過Ajax請求從后臺服務器得到的,在這個過程中,我們的Ajax請求不會導致整個百度頁面的重新加載,并且只針對搜索欄這局部模塊的數據進行了數據的更新,不會對整個頁面的其他地方進行數據的更新,這樣就大大提升了頁面的加載速度,用戶體驗高。

同步異步

針對于上述Ajax的局部刷新功能是因為Ajax請求是異步的,與之對應的有同步請求。接下來我們介紹一下異步請求和同步請求的區別。

? ??●?同步請求發送過程如下圖所示:

瀏覽器頁面在發送請求給服務器,在服務器處理請求的過程中,瀏覽器頁面不能做其他的操作。只能等到服務器響應結束后才能,瀏覽器頁面才能繼續做其他的操作。

? ??● 異步請求發送過程如下圖所示:

瀏覽器頁面發送請求給服務器,在服務器處理請求的過程中,瀏覽器頁面還可以做其他的操作。

原生Ajax

對于Ajax技術有了充分的認知了,我們接下來通過代碼來演示Ajax的效果。此處我們先采用原生的Ajax代碼來演示。因為Ajax請求是基于客戶端發送請求,服務器響應數據的技術。所以為了完成快速入門案例,我們需要提供服服務器端和編寫客戶端。

? ??● 服務器端

因為我們暫時還沒學過服務器端的代碼,所以此處已經直接提供好了服務器端的請求地址,我們前端直接通過Ajax請求訪問該地址即可。后臺服務器地址:http://yapi.smart-xwork.cn/mock/169327/emp/list

上述地址我們也可以直接通過瀏覽器來訪問,訪問結果如圖所示:只截取部分數據

? ??●?客戶端

客戶端的Ajax請求代碼如下有如下4步,接下來我們跟著步驟一起操作一下。

第一步:首先我們再VS Code中創建AJAX的文件夾,并且創建名為01. Ajax-原生方式.html的文件,提供如下代碼,主要是按鈕綁定單擊事件,我們希望點擊按鈕,來發送ajax請求

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>原生Ajax</title>
</head>
<body><input type="button" value="獲取數據" onclick="getData()"><div id="div1"></div></body>
<script>function getData(){}
</script>
</html>

第二步:創建XMLHttpRequest對象,用于和服務器交換數據,也是原生Ajax請求的核心對象,提供了各種方法。代碼如下:

//1.創建XMLHttpRequest
var XMLHttpRequest = new XMLHttpRequest();

第三步:調用對象的open()方法設置請求的參數信息,例如請求地址,請求方式。然后調用send()方法向服務器發送請求,代碼如下:

//2.發送異步請求
xmlHttpRequest.open('GET','http://yapi.smart-xwork.cn/mock/169327/emp/list');
xmlHttpRequest.send();//發送請求

第四步:我們通過綁定事件的方式,來獲取服務器響應的數據。

//3.獲取服務響應數據
xmlHttpRequest.onreadystatechange = function(){//此處判斷 4表示瀏覽器已經完全接受到Ajax請求得到的響應,200表示這是一個正確的Http請求,沒有錯誤if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;}
}

最后我們通過瀏覽器打開頁面,請求點擊按鈕,發送Ajax請求,最終顯示結果如下圖所示:

并且通過瀏覽器的f12抓包,我們點擊網絡中的XHR請求,發現可以抓包到我們發送的Ajax請求。XHR代表的就是異步請求

Axios

上述原生的Ajax請求的代碼編寫起來還是比較繁瑣的,所以接下來我們學習一門更加簡單的發送Ajax請求的技術Axios 。Axios是對原生的AJAX進行封裝,簡化書寫。Axios官網是:https://www.axios-http.cn

Axios的基本使用

Axios的使用比較簡單,主要分為2步:

? ??● 引入Axios文件

<script src="js/axios-0.18.0.js"></script>

? ??● 使用Axios發送請求,并獲取響應結果,官方提供的api很多,此處給出2種,如下

? ? ? ??○ 發送get請求

axios({method:"get",url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
}).then(function (resp){alert(resp.data);
})

? ? ? ??○ 發送post請求

axios({method:"post",url:"http://localhost:8080/ajax-demo1/aJAXDemo1",data:"username=zhangsan"
}).then(function (resp){alert(resp.data);
});

axios是用來發送異步請求的,小括號中使用js的JSON對象傳遞請求的相關參數:

? ??○ method屬性:用來設置請求方式的。取值為get或者post。

? ??○ url屬性:用來書寫請求的資源路徑。如果是get請求,需要將請求參數拼接到路徑的后面,格式為:url?參數名=參數值&參數名2=參數值2。

? ??○ data屬性:作為請求體被發送的數據。也就是說如果是post請求的話,數據需要作為data屬性的值。

then需要傳遞一個匿名函數。我們將then()中傳遞的匿名函數稱為回調函數,意思是該匿名函數在發送請求時不會被調用,而是在成功響應后調用的函數。而該回調函數中的resp參數是對響應的數據進行封裝的對象,通過resp.data可以獲取到響應的數據。

Axios快速入門

? ??● 后端實現

? ? ? ?查詢所有員工信息服務器地址:http://yapi.smart-xwork.cn/mock/169327/emp/list

? ? ? ?根據員工id刪除員工信息服務器地址:http://yapi.smart-xwork.cn/mock/169327/emp/deleteById

? ??● 前端實現

? ? ? ?首先在VS Code中創建js文件夾,與html同級,然后將axios-0.18.0.js文件拷貝到js目錄下,然后創建名為02.Ajax-Axios.html的文件,工程結果如圖所示:

然后在html中引入axios所依賴的js文件,并且提供2個按鈕,綁定單擊事件,分別用于點擊時發送ajax請求,完整代碼如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title><script src="js/axios-0.18.0.js"></script>
</head>
<body><input type="button" value="獲取數據GET" onclick="get()"><input type="button" value="刪除數據POST" onclick="post()"></body>
<script>function get(){//通過axios發送異步請求-get}function post(){//通過axios發送異步請求-post}
</script>
</html>

然后分別使用Axios的方法,完成get請求和post請求的發送

get請求代碼如下:

//通過axios發送異步請求-get
axios({method: "get",url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"
}).then(result => {console.log(result.data);
})

post請求代碼如下:

//通過axios發送異步請求-post
axios({method: "post",url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",data: "id=1"
}).then(result => {console.log(result.data);
})

瀏覽器打開,f12抓包,然后分別點擊2個按鈕,查看控制臺效果如下:

完整代碼如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title><script src="js/axios-0.18.0.js"></script>
</head>
<body><input type="button" value="獲取數據GET" onclick="get()"><input type="button" value="刪除數據POST" onclick="post()"></body>
<script>function get(){//通過axios發送異步請求-getaxios({method: "get",url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"}).then(result => {console.log(result.data);})}function post(){// 通過axios發送異步請求-postaxios({method: "post",url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",data: "id=1"}).then(result => {console.log(result.data);})}
</script>
</html>

請求方法的別名

Axios還針對不同的請求,提供了別名方式的api,具體如下:

方法描述
axios.get(url[,config])發送get請求
axios.delete(url[,config])發送delete請求
axios.post(url[,data[,config]])發送post請求
axios.put(url[,data[,config]])

發送put請求

我們目前只關注get和post請求,所以在上述的入門案例中,我們可以將get請求代碼改寫成如下:

axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {console.log(result.data);
}

post請求改寫成如下:

axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result =>
{console.log(result,data);
})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716093.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ACM】—藍橋杯大一暑期集訓Day3

&#x1f680;歡迎來到本文&#x1f680; &#x1f349;個人簡介&#xff1a;陳童學哦&#xff0c;目前學習C/C、算法、Python、Java等方向&#xff0c;一個正在慢慢前行的普通人。 &#x1f3c0;系列專欄&#xff1a;陳童學的日記 &#x1f4a1;其他專欄&#xff1a;CSTL&…

langchain學習筆記(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;?&#x1f517; Langchain 基于輸入的動態路由邏輯&#xff0c;通過上一步的輸出選擇下一步操作&#xff0c;允許創建非確定性鏈。路由保證路由間的結構和連貫。 有以下兩種方法執行路由 1、通過Ru…

Unity引擎中光源都有哪幾種,都有什么作用

本文由 簡悅 SimpRead 轉碼&#xff0c; 原文地址 mp.weixin.qq.com Unity 引擎為了實現游戲場景的明暗和光影效果&#xff0c;提供了四種類型的光源&#xff0c;分別是方向光&#xff08;Directional Lights&#xff09;、點光源&#xff08;Point Lights&#xff09;、聚光燈…

Vue開發實例(一)Vue環境搭建第一個項目

Vue環境搭建&第一個項目 一、環境搭建二、安裝Vue腳手架三、創建Vue項目 一、環境搭建 下載方式從官網下載&#xff1a;http://nodejs.cn/download/ 建議下載v12.16.0版本以上的&#xff0c;因為版本低無法創建Vue的腳手架 檢驗是否安裝成功 配置環境變量 新增NODE_HOME&…

win11系統中nginx簡單的代理配置

一.背景 為了公司安排的師帶徒任務。 操作系統版本&#xff1a;win11家庭版 nginx版本&#xff1a;1.24.0 二.配置代理 之前文章已經說明了nginx簡單的安裝&#xff0c;要看閱讀這個文章哈。web服務器nginx下載及在win11的安裝-CSDN博客 1.配置需求識別 前端服務nginx(80…

【探索AI】十七 深度學習之第3周:卷積神經網絡(CNN)(一)-CNN的基本原理與結構

第3周&#xff1a;卷積神經網絡&#xff08;CNN&#xff09; CNN的基本原理與結構 常見的卷積層、池化層與全連接層 LeNet、AlexNet等經典CNN模型 實踐&#xff1a;使用CNN進行圖像分類任務 CNN的基本原理與結構 引言與背景介紹 卷積神經網絡&#xff08;CNN&#xff09;是…

雙周回顧#007 - 前端與后端

前端的問題不是難&#xff0c;而是它面對最終用戶。只要用戶的喜好和口味發生變化&#xff0c;前端就必須跟上。 這導致前端不得不快速變化&#xff0c;因為用戶的口味正在越來越快地改變。 后端不需要面對最終用戶&#xff0c;需要解決的都是一些經典的計算機科學問題&#…

什么是Vue指令?請列舉一些常見的Vue指令以及它們的用法

Vue.js 是一款流行的前端框架&#xff0c;它的指令&#xff08;Directives&#xff09;是 Vue.js 提供的一種特殊屬性&#xff0c;用于在模板中對 DOM 元素進行直接操作。指令通常是以 v- 開頭的特殊屬性&#xff0c;用于響應式地將數據綁定到 DOM 元素上。 在 Vue 中&#xf…

C語言初階—函數(函數的聲明和定義,函數遞歸)

函數聲明&#xff1a; 1.告訴編譯器有一個函數叫什么&#xff0c;參數是什么&#xff0c;返回類型是什么&#xff0c;但是具體是不是存在&#xff0c;函數聲明決定不了。 2.函數的聲明一般出現在函數使用之前&#xff0c;要滿足先聲明后使用。 3.函數的聲明一般要放在頭文件中。…

Launch學習

參考博客&#xff1a; (1) 史上最全的launch的解析來啦&#xff0c;木有之一歐 1 ROS工作空間簡介 2 元功能包 src目錄下可以包含多個功能包&#xff0c;假設需要使用機器人導航模塊&#xff0c;但是這個模塊中包含著地圖、定位、路徑規劃等不同的功能包&#xff0c;它們的邏…

agent內存馬

搭建一個簡單的Servlet項目 ServletDemo package com.naihe;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;…

【探索AI】十一 深度學習之機器學習基礎

鑒于之前文章中提到的深度學習計劃&#xff0c;后續的文章會根據之前的接著繼續學習&#xff0c;python基礎略過&#xff0c;想學的同學請自學&#xff1a; python入門 python進階 機器學習基礎 機器學習是人工智能領域的一個子集&#xff0c;它專注于從數據中自動學習并提升…

vue2+若依框架plus交互 路由介紹

本周及寒假 參加了校企合作的工程過程管理&#xff0c;和學長學姐一起寫項目&#xff0c;之前學了vue也沒有應用&#xff0c;然后對框架很多組件的用法不太了解&#xff0c;前期耽誤了一些時間。 框架模塊 首先是框架模塊的介紹 api存了一些系統管理及發送請求的方法 例如p…

【python】`assert`斷言語句

assert是一個斷言語句&#xff0c;用于在代碼中檢查某個條件是否為真。 如果條件為假&#xff0c;將觸發AssertionError 異常&#xff0c;從而指示存在錯誤。

Linux獲取進程(系統啟動時間和運行時間)運行時間

Linux獲取進程運行時間 思路&#xff1a;使用 ps - o命令 ps -p 986 -o etime可以獲取進程986的執行時間&#xff0c;不論系統時間有沒有發生改變&#xff0c;它都可以返回正確的結果: 總結&#xff1a;etime 是真正的程序運行時間&#xff0c;而不是系統運行時間與進程啟動…

在您的下一個項目中選擇 Golang 和 Node.js 之間的抉擇

作為一名軟件開發者&#xff0c;我總是在尋找構建應用程序的最快、最高效的工具。在速度和處理復雜任務方面&#xff0c;我認為 Golang 和 Node.js 是頂尖技術。兩者在性能方面都享有極高的聲譽。但哪一個更快——Golang 還是 Node&#xff1f;我決定深入一些硬核基準測試&…

java-ssm-jsp-寵物護理預定系統

java-ssm-jsp-寵物護理預定系統 獲取源碼——》公主號&#xff1a;計算機專業畢設大全

ASPICE實操中的那點事兒-底層軟件的單元測試該如何做

先來說下ASPICE項目實操中遇到的問題&#xff1a; 底層軟件在做單元測試時&#xff0c;從ASPICE角度看&#xff0c;該如何做&#xff1f;要不要在目標控制器或開發板中去測&#xff1f;尤其是復雜驅動&#xff0c;如果不在將程序下載到硬件中&#xff0c;該如何測試&#xff1…

物聯網與智慧城市:融合創新,塑造未來城市生活新圖景

一、引言 在科技飛速發展的今天&#xff0c;物聯網與智慧城市的融合創新已成為推動城市發展的重要力量。物聯網技術通過連接萬物&#xff0c;實現信息的智能感知、傳輸和處理&#xff0c;為智慧城市的構建提供了無限可能。智慧城市則運用物聯網等先進技術&#xff0c;實現城市…

使用R語言進行Logistic回歸分析(2)

一、數據集描述&#xff0c;問題要求 下表是40位肺癌病人的生存資料&#xff0c;X1表示生活行為能力平分&#xff08;1到100&#xff09;&#xff0c;X2為病人的年齡&#xff08;年&#xff09;&#xff0c;X3由診斷到進入研究的時間&#xff08;月&#xff09;&#xff0c;X4…