主頁 > 前端設計 > 教你用三種不同方式獲取 GET 和 POST 請求

教你用三種不同方式獲取 GET 和 POST 請求

2021-11-10 08:43:36 前端設計

目錄

一、jQuery 方式

1. $.get() 獲取資料

① $.get() 發起不帶引數的請求

② $.get() 發起帶引數的請求

2. $.post() 提交資料

$.post() 向服務器提交資料

3. $.ajax() 既可以獲取也可以提交資料

① 使用 $.ajax() 發起 GET 請求(只需要將 type 屬性設定為' GET '即可)

② 使用 $.ajax() 發起 POST 請求

二、xhr 方式

1. 使用 xhr 發起 GET 請求

2. 使用 xhr 發起 POST 請求

三、axios 方式

1. 使用 axios 發起 GET 請求

2. 使用 axios 發起 POST 請求

3. 直接使用 axios 發起請求

① 直接使用 axios 發起 GET 請求

② 直接使用 axios 發起 POST 請求


今天分享的內容都是資料互動中的重中之重,滿滿的干貨,一定要仔細看噢~

一、jQuery 方式

瀏覽器中提供的XMLHttpRequest用法比較復雜,所以jQuery對XMLHttpRequest進行了封裝,提供了一系列Ajax相關的函式,極大地降低了Ajax的使用難度,

jQuery 中發起 Ajax 請求最常用的三個方法如下:

1. $.get() 獲取資料

$.get(url,[data],[callback])

引數名引數型別是否必選說明
urlstring要請求的資源地址
dataobject請求資源期間要攜帶的引數
callbackfunction請求成功時的回呼函式

① $.get() 發起不帶引數的請求

$.get('http://www.liulongbin.top:3006/api/getbooks',function(res){
         console.log(res) // 這里的 res 是服務器回傳的資料
})

② $.get() 發起帶引數的請求

$.get('http://www.liulongbin.top:3006/api/getbooks', { id: 1 }, function(res){
         console.log(res) 
})

切記!!!其中引數是以物件的形式

2. $.post() 提交資料

$.post(url,[data],[callback])

引數名引數型別是否必選說明
urlstring提交資料的地址
dataobject要提交的資料
callbackfunction資料提交成功時的回呼函式

$.post() 向服務器提交資料

$.post(
    'http://www.liulongbin.top:3006/api/addbook',  //請求的 URL 地址
    { bookname: '水滸傳', author: '施耐庵', publisher: '上海圖書出版社'}, //提交的資料
    function(res) {    // 回呼函式
      console.log(res)
   }
)

3. $.ajax() 既可以獲取也可以提交資料

$.ajax({

type: ' ', // 請求的方式,例如 GET 或 POST

url: ' ', // 請求的 URL 地址

data: { }, // 這次請求要攜帶的資料

success: function(res) { } // 請求成功之后的回呼函式

})

① 使用 $.ajax() 發起 GET 請求(只需要將 type 屬性設定為' GET '即可)

$.ajax({
  type: 'get',
  url: 'http://www.liulongbin.top:3006/api/getbooks',
  data: { id: 1 }
  success: function(res) {
    console.log(res)
}
})

② 使用 $.ajax() 發起 POST 請求

$.ajax({
  type: 'post',
  url: 'http://www.liulongbin.top:3006/api/getbooks',
  data: { 
     bookname: '水滸傳',
     author: '施耐庵',
     publisher: '上海圖書出版社'
 },
  success: function(res) {
    console.log(res)
}
})

既然了解了概念,那我們就實操一下,下面看個例題:實作圖書串列的增刪顯示功能

實作效果如下:

實作代碼如下:

<!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>Document</title>
    <link rel="stylesheet" href="bootstrap.css">
    <script src="jQuery.min.js"></script>
</head>
<body style="padding: 15px">
    
    <div class="panel panel-primary">
          <div class="panel-heading">
                <h3 class="panel-title">添加新圖書</h3>
          </div>
          <div class="panel-body form-inline">
                
                
                <div class="input-group">
                    <div class="input-group-addon">書名</div>
                    <input type="text" class="form-control" id="iptBookname" placeholder="請輸入書名">
                </div>
                <div class="input-group">
                    <div class="input-group-addon">作者</div>
                    <input type="text" class="form-control" id="iptAuthor" placeholder="請輸入作者">
                </div>
                <div class="input-group">
                    <div class="input-group-addon">出版社</div>
                    <input type="text" class="form-control" id="iptPublisher" placeholder="請輸入出版社">
                </div>
                
                <button id="btn" class="btn btn-primary">添加</button>
          </div>
    </div>
    
    <table class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>Id</th>
                <th>書名</th>
                <th>作者</th>
                <th>出版社</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody id="tb">
           
        </tbody>
    </table>
    <script>
        $(function(){
            //獲取圖書串列資料
            function getBookList(){
                $.get('http://www.liulongbin.top:3006/api/getbooks',function(res){
                    if(res.status !== 200) return alert('獲取資料失敗!');
                    // 把獲取到的資料都存放在陣列中
                    var rows = []
                    $.each(res.data, function(i,item){
                        rows.push('<tr><td>'+item.id+'</td><td>'+item.bookname+'</td><td>'+item.author+'</td><td>'+item.publisher+'</td><td><a href:"javascript:;" class="del" data-id="'+item.id+'">洗掉</a></td></tr>')
                    })
                    // 將陣列轉化為字串渲染到頁面
                    $('#tb').empty().append(rows.join(''))
                    
                })
            }
            getBookList()
            //洗掉圖書
            $('tbody').on('click','.del',function(){
                var id = $(this).attr('data-id')
                $.get('http://www.liulongbin.top:3006/api/delbook',{id: id},function(res){
                    if(res.status !== 200) return alert('洗掉圖書失敗!')
                    // 呼叫該函式,把頁面重新渲染一遍
                    getBookList()
                })
            })
            $('#btn').on('click',function(){
                // trim() 函式可以去除字串兩端的空格
                var bookname = $('#iptBookname').val().trim()
                var author = $('#iptAuthor').val().trim()
                var publisher = $('#iptPublisher').val().trim()
                if(bookname.length <= 0 || author.length <=0 || publisher.length <=0) {
                    return alert('請填寫完整的圖書資訊!')
                }
                // 添加圖書
                $.post('http://www.liulongbin.top:3006/api/addbook',{bookname: bookname, author: author,publisher: publisher},function(res){
                    if(res.status !== 201) return alert('添加圖書失敗!')
                    getBookList()
                    // 清空輸入框內容
                    $('#iptBookname').val('')
                    $('#iptAuthor').val('')
                    $('#iptPublisher').val('')
                })

            })
        })
    </script>
</body>
</html>

二、xhr 方式

XMLHttpRequest(簡稱 xhr) 是瀏覽器提供的 Javascript 物件,通過它,可以 請求服務器上的資料資源. 之前所學的 jQuery 中的 Ajax 函式,就是基于 xhr 物件封裝出來的

1. 使用 xhr 發起 GET 請求

方法如下圖所示:

        // 1. 創建 xhr 物件
        var xhr = new XMLHttpRequest()
        // 2. 呼叫 open 函式,指定 請求方式 與 URL地址
        xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks')
        // 3. 呼叫 send 函式,發起 Ajax 請求
        xhr.send()
        // 4. 監聽 onreadystatechange 事件
        xhr.onreadystatechange = function() {
            // 4.1 監聽 xhr 物件的請求狀態 readyState; 與服務器回應的狀態 status
            if(xhr.readyState === 4 && xhr.status === 200) {
                // 4.2 列印服務器回應回來的資料
                console.log(xhr.responseText);
            }
        }

如果發起的是帶引數的 GET 請求,只需要在呼叫 xhr.open 期間,為 URL 地址指定引數即可:

xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks?id=1&bookname=西游記')

多個引數之間用 & 連接

2. 使用 xhr 發起 POST 請求

方法如下圖所示:

        // 1. 創建 xhr 物件
        var xhr = new XMLHttpRequest()
        // 2. 呼叫 open 函式,指定 請求方式 與 URL地址
        xhr.open('POST','http://www.liulongbin.top:3006/api/addbooks')
        // 3. 設定 Content-Type 屬性(固定寫法)
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
        // 4. 呼叫 send 函式,同時將資料以 查詢字串 的形式,提交給服務器
        xhr.send('bookname=水滸傳&author=施耐庵&publisher=天津圖書出版社')
        // 5. 監聽 onreadystatechange 事件
        xhr.onreadystatechange = function() {
            // 4.1 監聽 xhr 物件的請求狀態 readyState; 與服務器回應的狀態 status
            if(xhr.readyState === 4 && xhr.status === 200) {
                // 4.2 列印服務器回應回來的資料
                console.log(xhr.responseText);
            }
        }

以 xhr 方式發起 PSOT 和 GET 請求的區別

① 傳遞資料引數的位置不同:GET 方式是寫在 URL 地址的后面,而 POST 方式是寫在xhr.send() 中

② 發起 POST 請求時,必須寫 xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded') ,GET 請求不需要寫

三、axios 方式

Axios 是專注于網路資料請求的庫,相比于原生的 XMLHttpRequest 物件, axios 簡單易用. 相比于 jQuery,axios 更加輕量化,只專注于網路資料請求

使用前要先匯入 axios.js 包

1. 使用 axios 發起 GET 請求

語法:

axios.get('url', { params: { /*引數*/} }).then(callback)

代碼如下:

        // 請求 URL 地址
        var url = 'http://www.liulongbin.top:3006/api/get'
        // 請求的引數物件
        var paramsObj = { name: 'zs', age: 20 }
        // 呼叫 axios.get() 發起 GET 請求
        axios.get(url, { params: paramsObj }).then(function(res){
            // res.data 是服務器回傳的資料
            var result = res.data
            console.log(res);
        })

2. 使用 axios 發起 POST 請求

語法:

axios.post('url', { /*引數*/} ).then(callback)

代碼如下:

         // 請求 URL 地址
        var url = 'http://www.liulongbin.top:3006/api/post'
        // 要提交到服務器的資料
        var dataObj = { location: '北京', address: '順義' }
        // 呼叫 axios.post() 發起 POST 請求
        axios.post(url, dataObj).then(function(res){
            // res.data 是服務器回傳的資料
            var result = res.data
            console.log(res);
        })

axios 發起 GET 和 POST 語法的區別

GET 請求時,引數要通過 params 屬性提供,而 POST 不用

3. 直接使用 axios 發起請求

axios 也提供了類似于 jQuery 中 $.ajax() 的函式,語法如下:

axios({

method: '請求型別',

url: '請求的URL地址'

data: { /* POST資料 */},

params: { /* GET引數 */}

}).then(callback)

① 直接使用 axios 發起 GET 請求

        axios({
            method: 'GET',
            url: 'http://www.liulongbin.top:3006/api/get',
            params: {  // GET 引數要通過 params 屬性提供
                name: 'zs',
                age: 20
            }
        }).then(function(res){
            console.log(res.data);
        })

② 直接使用 axios 發起 POST 請求

        axios({
            method: 'POST',
            url: 'http://www.liulongbin.top:3006/api/post',
            data: {  // POST 引數要通過 data 屬性提供
                bookname: '程式員的自我修養',
                price: 666
            }
        }).then(function(res){
            console.log(res.data);
        })

案例實踐:使用 axios 發起 GET 和 POST 請求獲取資料,并渲染到頁面

實作效果:

實作代碼:

<!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>Document</title>
    <script src="./axios.js"></script>
    <style>
        body {
            padding-left: 50px;
        }
        .container {
            width: 300px;
            height: 150px;
            box-shadow: 0 0 5px rgba(0,0,0,0.8);
            background-color: #c7c7c7;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <div class="container">

    </div>
    <button id="btn1">get更換</button>
    <button id="btn2">post更換</button>
    <script>
        document.querySelector('#btn1').addEventListener('click',function(){
           var url = 'https://xl.xilinglaoshi.com:8001/fenshou'
           
           axios({
               method: 'GET',
               url: url,
           }).then(function(res){
               // 獲取到需要的資料并渲染到頁面
               document.querySelector('.container').innerHTML = res.data.data[0].content;
           })
        })

        document.querySelector('#btn2').addEventListener('click',function(){
            var url = 'https://xl.xilinglaoshi.com:8001/qingshi'
            axios({
                method:'POST',
                url: url,
            }).then(function(res){
                document.querySelector('.container').innerHTML = res.data.data[0].content;
            })
        })
        
    </script>
</body>
</html>


這次的分享到這就結束啦~希望可以收到你的小心心~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/354655.html

標籤:其他

上一篇:EDG奪冠,Python分析一波B站評論,總結:EDG,nb

下一篇:教你從零開始畫echarts地圖

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more