欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ajax中GET與POST請(qǐng)求操作方法梳理介紹

 更新時(shí)間:2022年11月07日 15:01:59   作者:亦世凡華、  
Ajax全稱是Asynchronous Javascript And XML(異步JavaScript和XML),在網(wǎng)頁中,利用XMLHttpRequest對(duì)象和服務(wù)器進(jìn)行數(shù)據(jù)交互的方式,這篇文章主要介紹了Ajax中GET與POST請(qǐng)求操作

Ajax簡(jiǎn)介

Ajax全稱 Asynchronous JavaScript And XML,意思就是異步的JS 和 XML,通過Ajax可以在瀏覽器中向服務(wù)器發(fā)送異步請(qǐng)求。

作用:獲取服務(wù)器數(shù)據(jù)。

效果:在不刷新整個(gè)頁面的情況下,通過一個(gè)url地址獲取服務(wù)器的數(shù)據(jù),然后進(jìn)行頁面的局部刷新。

Ajax不是新的編程語言,而是一種將現(xiàn)有的標(biāo)準(zhǔn)組合在一起使用的新方式。

思想:用戶看,我就加載,用戶不看,我就不加載。

應(yīng)用場(chǎng)景:評(píng)論加載更多、用戶名登錄驗(yàn)證、搜索框搜索數(shù)據(jù)提示......

Ajax特點(diǎn)

Ajax優(yōu)點(diǎn):

1)可以無需刷新頁面而與服務(wù)器端進(jìn)行通信

2)允許根據(jù)用戶事件來更新部分頁面內(nèi)容

Ajax缺點(diǎn):

1)沒有瀏覽歷史,不能回退

2)存在跨域問題(同源)

3)SEO(搜索引擎優(yōu)化)不友好

Ajax GET請(qǐng)求的基本操作

Ajax簡(jiǎn)單來說,就是一個(gè)異步的 JavaScript 請(qǐng)求,用來獲取后臺(tái)服務(wù)端的數(shù)據(jù),而并不是整個(gè)頁面的跳轉(zhuǎn)。在元素 JS 中來實(shí)現(xiàn) Ajax 主要的類就是 XMLHttpRequest,其基本操作過程如下:

因?yàn)槲覀傾jax需要給服務(wù)端發(fā)送請(qǐng)求,所以下面的案例需要借助express框架,當(dāng)然我們也需要下載node環(huán)境,因?yàn)槲覀円残枰猲ode語法,nodeJs的話后期會(huì)開設(shè)專欄講解,案例涉及的語法大家權(quán)當(dāng)是提前了解了。當(dāng)然會(huì)的人可以忽略。

我們使用框架肯定要初始化包的,命令如下:(警告:我們進(jìn)行安裝包的過程,強(qiáng)烈要求路徑是英文,中文路徑會(huì)出現(xiàn)各種各樣的問題)

npm init --yes

下面開始安裝express框架,命令如下:

npm i express

安裝完成之后,我們啟用express框架,監(jiān)聽端口啟動(dòng)服務(wù)??梢栽L問自己設(shè)置的端口號(hào)以及文件路徑,即 127.0.0.1:8000/index 來判斷服務(wù)是否啟動(dòng)成功。

//在自己的js文件中編寫
// 1.引入express
const { response } = require('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('/index',(request,response)=>{
    // 設(shè)置響應(yīng)頭
    response.setHeader('Access-Control-Allow-Origin','*')
    // 設(shè)置響應(yīng)體
    response.send('hello Ajax')
})
// 4.監(jiān)聽端口啟動(dòng)服務(wù)
app.listen(8000,()=>{
    console.log('服務(wù)已經(jīng)啟動(dòng),8080端口監(jiān)聽中....');
})

現(xiàn)在我們進(jìn)行 Ajax 請(qǐng)求操作:通過Ajax的url請(qǐng)求操作來獲取響應(yīng)頭內(nèi)容。

<!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>
    <style>
        #result {
            width: 200px;
            height: 100px;
            border: 1px solid #008c8c;
        }
    </style>
</head>
<body>
    <button>點(diǎn)擊發(fā)送請(qǐng)求</button>
    <div id="result"></div>
    <script>
        // 獲取 button 元素
        const btn = document.querySelector('button')
        const result = document.getElementById('result')
        // 綁定事件
        btn.addEventListener('click',function(){
            // 進(jìn)行 Ajax 請(qǐng)求操作的四個(gè)步驟
            // 1.創(chuàng)建對(duì)象 (定義的 xhr 后面單詞的縮寫,當(dāng)然也可以自己定義)
            const xhr = new XMLHttpRequest()
            // 2. 初始化 設(shè)置請(qǐng)求的方法和url
            xhr.open('GET','http://127.0.0.1:8000/index')
            // 3.發(fā)送
            xhr.send()
            // 4.事件綁定 處理服務(wù)端返回的結(jié)果
            /* 
             * 這里對(duì)onreadystatechange這個(gè)方法進(jìn)行一定的講解
             * on 相當(dāng)于 when 表示 當(dāng)....時(shí)候
             * readystate 是xhr對(duì)象中的屬性,其能表示以下五個(gè)狀態(tài):
               0(未初始化) 1(open方法已經(jīng)調(diào)用完畢) 2(send方法已經(jīng)調(diào)用完畢) 3(服務(wù)端返回的部分結(jié)果) 4(服務(wù)端返回的所以結(jié)果) 
             * change 改變
            */
            xhr.onreadystatechange = function(){
                // 判斷 (服務(wù)端返回了所有的結(jié)果)
                if(xhr.readyState === 4){
                    // 判斷響應(yīng)狀態(tài)碼 (當(dāng)時(shí)是選擇成功的狀態(tài)碼) 狀態(tài)碼有:200 401 404 500 當(dāng)然狀態(tài)碼只要是 2xx 即二百多都是表示成功
                    if(xhr.status >= 200 && xhr.status < 300){
                        // 處理結(jié)果 將響應(yīng)體的內(nèi)容打印到我們的div邊框當(dāng)中
                        result.innerHTML = xhr.response
                    }
                }
            }
        })
    </script>
</body>
</html>

當(dāng)我們有需求要為Ajax設(shè)置url參數(shù)時(shí),我們可以直接在Ajax的初始化步驟上設(shè)置url參數(shù)即可:

Ajax GET請(qǐng)求的緩存問題

對(duì)于低版本的IE瀏覽器來說,Ajax的get請(qǐng)求可能會(huì)走緩存,存在緩存問題,對(duì)于現(xiàn)代的瀏覽器來說,大部分瀏覽器都已經(jīng)不存在Ajax get緩存問題了。

Ajax GET請(qǐng)求緩存問題:

1)在HTTP協(xié)議中規(guī)定get請(qǐng)求會(huì)被緩存起來

2)發(fā)送Ajax GET請(qǐng)求時(shí),在同一個(gè)瀏覽器上,前后發(fā)送的Ajax請(qǐng)求路徑一樣的話,對(duì)于低版本的IE來說,第二次的Ajax請(qǐng)求會(huì)走緩存,不走服務(wù)器。POST請(qǐng)求在HTTP協(xié)議中規(guī)定是:POST請(qǐng)求不會(huì)被瀏覽器緩存。

GET請(qǐng)求緩存的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):直接從瀏覽器緩存中獲取資源,不需要從服務(wù)器上重新加載資源,速度較快,用戶體驗(yàn)好。

缺點(diǎn):無法實(shí)時(shí)獲取最新的服務(wù)器資源。

瀏覽器走緩存的時(shí)機(jī):

1)第一個(gè)GET請(qǐng)求

2)請(qǐng)求路徑已經(jīng)被瀏覽器緩存過,第二次發(fā)送請(qǐng)求的時(shí)候這個(gè)路徑?jīng)]有變化,會(huì)走瀏覽器緩存

解決Ajax GET請(qǐng)求緩存問題:

1)可以在請(qǐng)求路徑的url后面加一個(gè)時(shí)間戳,這個(gè)時(shí)間戳隨時(shí)變化,所以每一次發(fā)送請(qǐng)求路徑都是不一樣的,這樣就不會(huì)走瀏覽器緩存問題。

2)可以采用時(shí)間戳:"url?t=" + new Date().getTime()

3)通過隨機(jī)數(shù):"url?t=" Math.random()

4)隨機(jī)數(shù) + 時(shí)間戳 也是可以的

在chrome瀏覽器修改數(shù)據(jù)在啟動(dòng)服務(wù)時(shí),會(huì)實(shí)時(shí)更新數(shù)據(jù),但是在IE瀏覽器中,會(huì)走本地緩存不會(huì)更新實(shí)時(shí)數(shù)據(jù)的。

Ajax POST請(qǐng)求的基本操作

和上文的get請(qǐng)求基本一致,我們只需要改動(dòng)幾個(gè)地方的內(nèi)容即可。如下圖所示,當(dāng)我們要進(jìn)行Ajax的POST請(qǐng)求時(shí),我們只需要將初始化改為POST即可。

當(dāng)然,我們進(jìn)行 Ajax POST請(qǐng)求時(shí),我們的express框架創(chuàng)建的路由規(guī)則也是要加上 post 規(guī)則的

那么如何給POST請(qǐng)求設(shè)置參數(shù)呢?因?yàn)閭鲄⒎绞讲煌援?dāng)然不是和GET請(qǐng)求相同,而是在Ajax請(qǐng)求數(shù)據(jù)的第三步發(fā)送 send 請(qǐng)求時(shí)傳遞數(shù)據(jù),請(qǐng)看如下:

Ajax 設(shè)置請(qǐng)求頭信息

Ajax設(shè)置請(qǐng)求頭信息可以自己規(guī)定,即在進(jìn)行Ajax請(qǐng)求的第二步操作時(shí)設(shè)置請(qǐng)求頭即可,如果想自己規(guī)定一些請(qǐng)求頭的名稱,需要自己在設(shè)置路由規(guī)則時(shí)設(shè)置響應(yīng)頭的標(biāo)準(zhǔn)內(nèi)容,具體操作如下:

nodemon工具安裝

nodemon是一種工具,可在檢測(cè)到目錄中的文件更改時(shí)通過自動(dòng)重新啟動(dòng)節(jié)點(diǎn)應(yīng)用程序來幫助開發(fā)基于 node.js 的應(yīng)用程序,所以說使用該工具還是需要先安裝node.js的。

那我就假設(shè)你已經(jīng)安裝了node.js了,安裝nodemon命令如下:

npm install -g nodemon

安裝完成之后,我們對(duì)服務(wù)就不需要在修改之后再重啟了,只執(zhí)行以下命令即可。

nodemon index.js

執(zhí)行上面的命令可能會(huì)出現(xiàn)系統(tǒng)不允許的報(bào)錯(cuò)信息,在命令前面加上 npx 即可。 成功畫面如下圖這樣一來我們就免去了修改代碼時(shí)來回重啟服務(wù)的繁瑣。

基于JSON的數(shù)據(jù)交換

在實(shí)際工作當(dāng)中,我們向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端返回的結(jié)果絕大多數(shù)情況都是一個(gè)JSON格式的數(shù)據(jù)。當(dāng)然如果我們想設(shè)置響應(yīng)體時(shí),需要將對(duì)象通過JSON轉(zhuǎn)換為字符串。

<!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>
    <style>
        #result {
            width: 200px;
            height: 100px;
            border: 1px solid #008c8c;
        }
    </style>
</head>
<body>
    <div id="result"></div>
    <script>
        const result = document.getElementById('result')
        // 綁定鍵盤按下事件
        window.onkeydown = function(){
            // 發(fā)送 Ajax 請(qǐng)求
            const xhr = new XMLHttpRequest()
            // 設(shè)置響應(yīng)體的類型
            xhr.responseType = 'json'
            // 初始化
            xhr.open('GET','http://127.0.0.1:8000/json-index')
            // 發(fā)送
            xhr.send()
            // 事件綁定
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status >= 200 && xhr.status <300){
                        // 處理
                        // 手動(dòng)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)化
                        // let data = JSON.parse(xhr.response)
                        // console.log(data);
                        // result.innerHTML = data.name
                        // 自動(dòng)轉(zhuǎn)換
                        console.log(xhr.response);
                        result.innerHTML = xhr.response.name
                    }
                }
            }
        }
    </script>
</body>
</html>
// 1.引入express
const { response } = require('express')
const express = require('express')
// 2.創(chuàng)建應(yīng)用對(duì)象
const app = express()
// 3.get創(chuàng)建路由規(guī)則
app.get('/index',(request,response)=>{
    // 設(shè)置響應(yīng)頭
    response.setHeader('Access-Control-Allow-Origin','*')
    // 設(shè)置響應(yīng)體
    response.send('hello Ajax')
})
// 3.post創(chuàng)建路由規(guī)則
app.all('/json-index',(request,response)=>{
    // 設(shè)置響應(yīng)頭
    response.setHeader('Access-Control-Allow-Origin','*')
    // 設(shè)置響應(yīng)體,可以自己規(guī)定響應(yīng)體
    response.setHeader('Access-Control-Allow-Headers','*')
    // 響應(yīng)一個(gè)數(shù)據(jù)
    const data = {
        name:'張三'
    }
    // 將對(duì)象進(jìn)行字符串轉(zhuǎn)換
    let str = JSON.stringify(data)
    // 設(shè)置響應(yīng)體
    response.send(str)
})
// 4.監(jiān)聽端口啟動(dòng)服務(wù)
app.listen(8000,()=>{
    console.log('服務(wù)已經(jīng)啟動(dòng),8080端口監(jiān)聽中....');
})

到此這篇關(guān)于Ajax中GET與POST請(qǐng)求操作方法梳理介紹的文章就介紹到這了,更多相關(guān)Ajax GET與POST請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果

    JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果,通過簡(jiǎn)單的JavaScript頁面元素遍歷及樣式操作實(shí)現(xiàn)下拉菜單效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-09-09
  • JS中函數(shù)科里化的背景與應(yīng)用實(shí)例教程

    JS中函數(shù)科里化的背景與應(yīng)用實(shí)例教程

    在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,柯里化是一種將使用多個(gè)參數(shù)的一個(gè)函數(shù)轉(zhuǎn)換成一系列使用一個(gè)參數(shù)的函數(shù)的技術(shù),下面這篇文章主要給大家介紹了JS中函數(shù)科里化的背景與應(yīng)用實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • js父頁面與子頁面不同時(shí)顯示的方法

    js父頁面與子頁面不同時(shí)顯示的方法

    這篇文章主要介紹了js父頁面與子頁面不同時(shí)顯示的方法,打開一個(gè)頁面后,父頁面DISABLE,在子頁面關(guān)閉后,父頁面ENABLE,是比較實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • 加載遠(yuǎn)程圖片時(shí),經(jīng)常因?yàn)榫彺娑貌坏礁碌慕鉀Q方法(分享)

    加載遠(yuǎn)程圖片時(shí),經(jīng)常因?yàn)榫彺娑貌坏礁碌慕鉀Q方法(分享)

    本篇文章是對(duì)加載遠(yuǎn)程圖片時(shí),經(jīng)常因?yàn)榫彺娑貌坏礁碌慕鉀Q方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • JavaScript數(shù)據(jù)結(jié)構(gòu)Number

    JavaScript數(shù)據(jù)結(jié)構(gòu)Number

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)Number,Number?是JavaScript的基本數(shù)據(jù)結(jié)構(gòu),是對(duì)應(yīng)數(shù)值的應(yīng)用類型,下文給大家分享JavaScript使用?Number?的常見問題,需要的朋友可以參考一下
    2022-02-02
  • 如何理解JavaScript模塊化

    如何理解JavaScript模塊化

    模塊化簡(jiǎn)單來說就是將一個(gè)完整的長篇代碼文件根據(jù)功能進(jìn)行劃分成幾個(gè)文件,這些文件各自負(fù)責(zé)一個(gè)獨(dú)立的功能,各個(gè)文件組合起來實(shí)現(xiàn)一個(gè)完整的大功能,這就是模塊化,每個(gè)負(fù)責(zé)獨(dú)立功能的文件就是模塊。
    2021-05-05
  • javascript實(shí)現(xiàn)控制瀏覽器全屏

    javascript實(shí)現(xiàn)控制瀏覽器全屏

    這篇文章主要介紹了javascript實(shí)現(xiàn)控制瀏覽器全屏的代碼分享給大家,十分的實(shí)用,有需要的小伙伴可以參考下。
    2015-03-03
  • 小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn)

    小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn)

    這篇文章主要介紹了小程序數(shù)據(jù)緩存機(jī)制應(yīng)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • JS設(shè)計(jì)模式之命令模式的用法詳解

    JS設(shè)計(jì)模式之命令模式的用法詳解

    JavaScript中的命令模式是一種設(shè)計(jì)模式,它提供了一種將命令封裝為對(duì)象的方式,從而允許我們將請(qǐng)求與實(shí)際執(zhí)行該請(qǐng)求的操作對(duì)象解耦,這種模式可以在不同的場(chǎng)景中使用,例如實(shí)現(xiàn)撤銷/重做操作、隊(duì)列任務(wù)等,本文我們將講解命令設(shè)計(jì)模式在JS中的使用
    2023-08-08
  • js判斷radiobuttonlist的選中值顯示/隱藏其它模塊的實(shí)現(xiàn)方法

    js判斷radiobuttonlist的選中值顯示/隱藏其它模塊的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s判斷radiobuttonlist的選中值顯示/隱藏其它模塊的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08

最新評(píng)論