日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

网络编程-JavaScript中发送网络请求汇总

發(fā)布時(shí)間:2023/12/20 javascript 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程-JavaScript中发送网络请求汇总 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1.前后端分離優(yōu)勢(shì)
    • 2.HTTP協(xié)議的解析
      • 2.1 HTTP的介紹
      • 2.2 HTTP的組成
      • 2.3 HTTP的版本
      • 2.4 HTTP請(qǐng)求方式
      • 2.5 HTTP請(qǐng)求頭字段
      • 2.6 HTTP響應(yīng)狀態(tài)碼
      • 2.7 HTTP響應(yīng)頭
    • 3.AJAX網(wǎng)絡(luò)請(qǐng)求
      • 3.1 AJAX發(fā)送請(qǐng)求
      • 3.2 XHR的狀態(tài)
      • 3.3 XHR其他事件監(jiān)聽
      • 3.4 響應(yīng)數(shù)據(jù)和響應(yīng)類型
      • 3.5 HTTP的響應(yīng)狀態(tài)
      • 3.7 GET/POST傳遞參數(shù)
    • 4.AJAX網(wǎng)絡(luò)請(qǐng)求封裝
      • 補(bǔ)充: 過(guò)期時(shí)間和取消請(qǐng)求
        • 過(guò)期時(shí)間
        • 取消請(qǐng)求
    • 5.Fetch使用和上傳文件
      • 5.1 Fetch基本使用
      • 5.2 Fetch數(shù)據(jù)的響應(yīng)
      • 5.3 Fetch網(wǎng)絡(luò)請(qǐng)求的演練
      • 5.4 Fetch POST請(qǐng)求
      • 5.4 Fetch POST請(qǐng)求

1.前后端分離優(yōu)勢(shì)

早期的網(wǎng)頁(yè)都是通過(guò)后端渲染來(lái)完成的:服務(wù)器端渲染(SSR,server side render)

  • 客戶端發(fā)出請(qǐng)求 -> 服務(wù)端接收請(qǐng)求并返回相應(yīng)HTML文檔 -> 頁(yè)面刷新,客戶端加載新的HTML文檔;

服務(wù)器端渲染的缺點(diǎn):

  • 當(dāng)用戶點(diǎn)擊頁(yè)面中的某個(gè)按鈕向服務(wù)器發(fā)送請(qǐng)求時(shí),頁(yè)面本質(zhì)上只是一些數(shù)據(jù)發(fā)生了變化,而此時(shí)服務(wù)器卻要將重繪的整個(gè)頁(yè)面再返回給瀏覽器加載,這顯然有悖于程序員的“DRY( Don‘t repeat yourself )”原則;
  • 而且明明只是一些數(shù)據(jù)的變化卻迫使服務(wù)器要返回整個(gè)HTML文檔,這本身也會(huì)給網(wǎng)絡(luò)帶寬帶來(lái)不必要的開銷。

有沒(méi)有辦法在頁(yè)面數(shù)據(jù)變動(dòng)時(shí),只向服務(wù)器請(qǐng)求新的數(shù)據(jù),并且在阻止頁(yè)面刷新的情況下,動(dòng)態(tài)的替換頁(yè)面中展示的數(shù)據(jù)呢?

  • 答案正是“AJAX”。

AJAX是“Asynchronous JavaScript And XML”的縮寫(異步的JavaScript和XML),是一種實(shí)現(xiàn)無(wú)頁(yè)面刷新獲取服務(wù)器數(shù)據(jù)的技術(shù)

  • AJAX最吸引人的就是它的“異步”特性,也就是說(shuō)它可以在不重新刷新頁(yè)面的情況下與服務(wù)器通信,交換數(shù)據(jù),或更新頁(yè)面

你可以使用AJAX最主要的兩個(gè)特性做下列事 :

  • 不重新加載頁(yè)面的情況下發(fā)送請(qǐng)求給服務(wù)器
  • 接受并使用從服務(wù)器發(fā)來(lái)的數(shù)據(jù)

這里有兩幅圖給大家理解一下:

  • 服務(wù)器端渲染
  • 前后端分離
  • 2.HTTP協(xié)議的解析

    2.1 HTTP的介紹

    什么是HTTP呢?我們來(lái)看一下維基百科的解釋

    • 超文本傳輸協(xié)議(英語(yǔ):HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議
    • HTTP是萬(wàn)維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ),設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法
    • 通過(guò)HTTP或者HTTPS協(xié)議請(qǐng)求的資源由統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers,URI)來(lái)標(biāo)識(shí)

    HTTP是一個(gè)客戶端(用戶)和服務(wù)端(網(wǎng)站)之間請(qǐng)求和響應(yīng)的標(biāo)準(zhǔn)

    通過(guò)使用網(wǎng)頁(yè)瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具,客戶端發(fā)起一個(gè)HTTP請(qǐng)求到服務(wù)器上指定端口(默認(rèn)端口為80);

    • 我們稱這個(gè)客戶端為用戶代理程序(user agent);

    響應(yīng)的服務(wù)器上存儲(chǔ)著一些資源,比如HTML文件和圖像。

    • 我們也稱這個(gè)響應(yīng)服務(wù)器為源服務(wù)器(origin server);

    我們網(wǎng)頁(yè)中的資源通常是被放在Web資源服務(wù)器中,由瀏覽器自動(dòng)發(fā)送HTTP請(qǐng)求來(lái)獲取、解析、展示的。

    目前我們頁(yè)面中很多數(shù)據(jù)是動(dòng)態(tài)展示的

    • 比如頁(yè)面中的數(shù)據(jù)展示搜索數(shù)據(jù)表單驗(yàn)證等等,也是通過(guò)在JavaScript中發(fā)送HTTP請(qǐng)求獲取的;

    2.2 HTTP的組成

    一次HTTP請(qǐng)求主要包括:請(qǐng)求(Request)和響應(yīng)(Response)(如下圖所示)

    請(qǐng)求又包含請(qǐng)求行請(qǐng)求頭請(qǐng)求體 (如下圖所示)

    響應(yīng)也包含響應(yīng)行、響應(yīng)頭響應(yīng)體 (如下圖所示)

    2.3 HTTP的版本

    HTTP/0.9

    • 發(fā)布于1991年;
    • 只支持GET請(qǐng)求方法獲取文本數(shù)據(jù),當(dāng)時(shí)主要是為了獲取HTML頁(yè)面內(nèi)容;

    HTTP/1.0

    • 發(fā)布于1996年;
    • 支持POST、HEAD等請(qǐng)求方法,支持請(qǐng)求頭、響應(yīng)頭等,支持更多種數(shù)據(jù)類型(不再局限于文本數(shù)據(jù)) ;
    • 但是瀏覽器的每次請(qǐng)求都需要與服務(wù)器建立一個(gè)TCP連接,請(qǐng)求處理完成后立即斷開TCP連接,每次建立連接增加了性能損耗;

    HTTP/1.1(目前使用最廣泛的版本)

    • 發(fā)布于1997年;
    • 增加了PUT、DELETE等請(qǐng)求方法;
    • 采用持久連接(Connection: keep-alive),多個(gè)請(qǐng)求可以共用同一個(gè)TCP連接;

    HTTP/2.0, 2015年

    HTTP/3.0, 2018年

    2.4 HTTP請(qǐng)求方式

    在RFC中定義了一組請(qǐng)求方式,來(lái)表示要對(duì)給定資源執(zhí)行的操作

    • GET:GET 方法請(qǐng)求一個(gè)指定資源的表示形式,使用 GET 的請(qǐng)求應(yīng)該只被用于獲取數(shù)據(jù)。

    • HEAD:HEAD 方法請(qǐng)求一個(gè)與 GET 請(qǐng)求的響應(yīng)相同的響應(yīng),但沒(méi)有響應(yīng)體。

      比如在準(zhǔn)備下載一個(gè)文件前,先獲取文件的大小,再?zèng)Q定是否進(jìn)行下載;

    • POST:POST 方法用于將實(shí)體提交到指定的資源。

    • PUT:PUT 方法用請(qǐng)求有效載荷(payload)替換目標(biāo)資源的所有當(dāng)前表示;

    • DELETE:DELETE 方法刪除指定的資源;

    • PATCH:PATCH 方法用于對(duì)資源應(yīng)部分修改;

    • CONNECT:CONNECT 方法建立一個(gè)到目標(biāo)資源標(biāo)識(shí)的服務(wù)器的隧道,通常用在代理服務(wù)器,網(wǎng)頁(yè)開發(fā)很少用到。

    • TRACE:TRACE 方法沿著到目標(biāo)資源的路徑執(zhí)行一個(gè)消息環(huán)回測(cè)試。

    在開發(fā)中使用最多的是GETPOST請(qǐng)求

    • 在后續(xù)的后臺(tái)管理項(xiàng)目中,我們也會(huì)使用PATCH、DELETE請(qǐng)求

    2.5 HTTP請(qǐng)求頭字段

    在request對(duì)象的header中也包含很多有用的信息,客戶端會(huì)默認(rèn)傳遞過(guò)來(lái)一些信息(如下) :

    content-type: 這次請(qǐng)求攜帶的數(shù)據(jù)的類型

    • application/x-www-form-urlencoded:表示數(shù)據(jù)被編碼成以 ‘&’ 分隔的鍵 - 值對(duì),同時(shí)以 ‘=’ 分隔鍵和值
    • application/json:表示是一個(gè)json類型;
    • text/plain:表示是文本類型;
    • application/xml:表示是xml類型;
    • multipart/form-data:表示是上傳文件;

    content-length:文件的大小長(zhǎng)度

    keep-alive :

    • http是基于TCP協(xié)議的,但是通常在進(jìn)行一次請(qǐng)求和響應(yīng)結(jié)束后會(huì)立刻中斷;
    • 在http1.0中,如果想要繼續(xù)保持連接:
      • 瀏覽器需要在請(qǐng)求頭中添加 connection: keep-alive;
      • 服務(wù)器需要在響應(yīng)頭中添加 connection:keey-alive;
      • 當(dāng)客戶端再次放請(qǐng)求時(shí),就會(huì)使用同一個(gè)連接,直接一方中斷連接;
    • 在http1.1中,所有連接默認(rèn)是 connection: keep-alive的;
      • 不同的Web服務(wù)器會(huì)有不同的保持 keep-alive的時(shí)間;
      • Node中默認(rèn)是5s中;

    accept-encoding:告知服務(wù)器,客戶端支持的文件壓縮格式,比如js文件可以使用gzip編碼,對(duì)應(yīng) .gz文件;

    accept:告知服務(wù)器,客戶端可接受文件的格式類型;

    user-agent:客戶端相關(guān)的信息;

    2.6 HTTP響應(yīng)狀態(tài)碼

    Http狀態(tài)碼(Http Status Code)是用來(lái)表示Http響應(yīng)狀態(tài)的數(shù)字代碼

    • Http狀態(tài)碼非常多,可以根據(jù)不同的情況,給客戶端返回不同的狀態(tài)碼;
    常見HTTP狀態(tài)碼狀態(tài)描述信息說(shuō)明
    200OK客戶端請(qǐng)求成功
    201CreatedPOST請(qǐng)求,創(chuàng)建新的資源
    301Moved Permanently請(qǐng)求資源的URL已經(jīng)修改,響應(yīng)中會(huì)給出新的URL
    400Bad Request客戶端的錯(cuò)誤,服務(wù)器無(wú)法或者不進(jìn)行處理
    401Unauthorized未授權(quán)的錯(cuò)誤,必須攜帶請(qǐng)求的身份信息
    403Forbidden客戶端沒(méi)有權(quán)限訪問(wèn),被拒接
    404Not Found服務(wù)器找不到請(qǐng)求的資源。
    500Internal Server Error服務(wù)器遇到了不知道如何處理的情況。
    503Service Unavailable服務(wù)器不可用,可能處理維護(hù)或者重載狀態(tài),暫時(shí)無(wú)法訪問(wèn)

    更多響應(yīng)碼介紹在MDN文檔上, 鏈接給到大家: MDN上響應(yīng)碼文檔: https://developer.mozilla.org/zh-CN/docs/web/http/status

    2.7 HTTP響應(yīng)頭

    響應(yīng)的header中包括一些服務(wù)器給客戶端的信息

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-L3n6aQgp-1657070357626)(img/Snipaste_2022-07-05_11-06-57.png)]

    3.AJAX網(wǎng)絡(luò)請(qǐng)求

    3.1 AJAX發(fā)送請(qǐng)求

    AJAX 是異步的 JavaScript 和 XML(Asynchronous JavaScript And XML)

    • 它可以使用 JSON,XML,HTML 和 text 文本等格式發(fā)送和接收數(shù)據(jù);

    如何來(lái)完成AJAX請(qǐng)求呢?

    • 第一步:創(chuàng)建網(wǎng)絡(luò)請(qǐng)求的AJAX對(duì)象(使用XMLHttpRequest)

    • 第二步:監(jiān)聽XMLHttpRequest對(duì)象狀態(tài)的變化,或者監(jiān)聽onload事件(請(qǐng)求完成時(shí)觸發(fā));

    • 第三步:配置網(wǎng)絡(luò)請(qǐng)求(通過(guò)open方法), open方法可以傳入兩個(gè)參數(shù);

      參數(shù)一: method(請(qǐng)求的方式: get, post …)

      參數(shù)二: url(請(qǐng)求的地址)

    • 第四步:發(fā)送send網(wǎng)絡(luò)請(qǐng)求;

    【演示代碼】

    // 1.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求對(duì)象 const xhr = new XMLHttpRequest()// 2.監(jiān)聽對(duì)象狀態(tài)的變化 xhr.addEventListener("readystatechange", function() {// 拿到網(wǎng)絡(luò)請(qǐng)求的結(jié)果console.log(xhr.response) })// 3.配置網(wǎng)絡(luò)請(qǐng)求 // 參數(shù)一: 請(qǐng)求的方式; 參數(shù)二: 要請(qǐng)求的url地址 xhr.open("get", "http://192.168.0.110:1888")// 4.發(fā)生網(wǎng)絡(luò)請(qǐng)求 xhr.send()

    發(fā)送同步請(qǐng)求:

    • 我們發(fā)送網(wǎng)絡(luò)請(qǐng)求, 默認(rèn)是異步的, 但是我們也可以發(fā)送同步的網(wǎng)絡(luò)請(qǐng)求

    • 我們是需要將open的第三個(gè)參數(shù)設(shè)置為false (默認(rèn)時(shí)true), 就可以開啟同步的請(qǐng)求

    • 當(dāng)然我們實(shí)際開發(fā)還是用異步的請(qǐng)求

    // 開啟同步 xhr.open("get", "http://192.168.0.110:1888", false)

    3.2 XHR的狀態(tài)

    事實(shí)上,我們?cè)谝淮尉W(wǎng)絡(luò)請(qǐng)求中看到狀態(tài)發(fā)生了很多次變化,這是因?yàn)閷?duì)于一次請(qǐng)求來(lái)說(shuō)包括如下的狀態(tài):

    值狀態(tài)描述
    0UNSENT代理被創(chuàng)建,但尚未調(diào)用 open() 方法。
    1OPENEDopen() 方法已經(jīng)被調(diào)用。
    2HEADERS_RECEIVEDsend() 方法已經(jīng)被調(diào)用,并且頭部和狀態(tài)已經(jīng)可獲得。
    3LOADING下載中;responseText 屬性已經(jīng)包含部分?jǐn)?shù)據(jù)。
    4DONE下載操作已完成。

    狀態(tài)0我們是監(jiān)聽不到的


    例如: 我們想要獲取結(jié)果, 應(yīng)該在下載操作已完成后獲取

    // 1.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求對(duì)象 const xhr = new XMLHttpRequest()// 2.監(jiān)聽對(duì)象狀態(tài)的變化 xhr.addEventListener("readystatechange", function() {// 狀態(tài)不為4的話直接returnif (xhr.readyState !== XMLHttpRequest.DONE) return// 拿到的結(jié)果是一個(gè)字符串, 我們可以轉(zhuǎn)成js對(duì)象const resJSON = JSON.parse(xhr.response)console.log(resJSON) })// 3.配置網(wǎng)絡(luò)請(qǐng)求 // 參數(shù)一: 請(qǐng)求的方式; 參數(shù)二: 要請(qǐng)求的url地址 xhr.open("get", "http://192.168.0.110:1888")// 4.發(fā)生網(wǎng)絡(luò)請(qǐng)求 xhr.send()

    注意<:這個(gè)狀態(tài)并非是HTTP的響應(yīng)狀態(tài),而是記錄的XMLHttpRequest對(duì)象的狀態(tài)變化。

    • http響應(yīng)狀態(tài)通過(guò)status獲取;

    3.3 XHR其他事件監(jiān)聽

    我們除了可以監(jiān)聽readystatechange之外, 還有其他的事件可以監(jiān)聽

    • loadstart:請(qǐng)求開始。
    • progress: 一個(gè)響應(yīng)數(shù)據(jù)包到達(dá),此時(shí)整個(gè) response body 都在 response 中。
    • abort:調(diào)用 xhr.abort() 取消了請(qǐng)求。
    • error:發(fā)生連接錯(cuò)誤,例如,域錯(cuò)誤。不會(huì)發(fā)生諸如 404 這類的 HTTP 錯(cuò)誤。
    • load:請(qǐng)求成功完成。
    • timeout:由于請(qǐng)求超時(shí)而取消了該請(qǐng)求(僅發(fā)生在設(shè)置了 timeout 的情況下)。
    • loadend:在 load,error,timeout 或 abort 之后觸發(fā)。

    我們也可以在load中獲取請(qǐng)求數(shù)據(jù):

    // 在load中獲取請(qǐng)求結(jié)果 xhr.addEventListener("load", function() {console.log(xhr.response) })

    3.4 響應(yīng)數(shù)據(jù)和響應(yīng)類型

    發(fā)送了請(qǐng)求后,我們需要獲取對(duì)應(yīng)的結(jié)果:response屬性

    • XMLHttpRequest response 屬性返回響應(yīng)的正文內(nèi)容
    • 返回的類型取決于responseType的屬性設(shè)置

    通過(guò)responseType可以設(shè)置獲取數(shù)據(jù)的類型

    • 如果將 responseType 的值設(shè)置為空字符串,則會(huì)使用 text 作為默認(rèn)值。
    • 設(shè)置數(shù)據(jù)類型, 一般在監(jiān)聽事件之后, 且在send方法之前
    const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response) })// 由于responseType默認(rèn)值為test, 因此我們拿到的結(jié)果是一個(gè)字符串 // 告知xhr獲取的數(shù)據(jù)為json類型 xhr.responseType = "json"// json類型接口 xhr.open("get", "http://123.207.32.32:8000/home/multidata")xhr.send()

    和responseText、responseXML的區(qū)別

    • 早期通常服務(wù)器返回的數(shù)據(jù)是普通的文本和XML,所以我們通常會(huì)通過(guò)responseText、 responseXML來(lái)獲取響應(yīng)結(jié)果 , 之后將它們轉(zhuǎn)化成JavaScript對(duì)象形式;
    • 目前服務(wù)器基本返回的都是json數(shù)據(jù),直接設(shè)置為json即可

    3.5 HTTP的響應(yīng)狀態(tài)

    前面我們提到, XMLHttpRequest的state是用于記錄xhr對(duì)象本身的狀態(tài)變化,并非針對(duì)于HTTP的網(wǎng)絡(luò)請(qǐng)求狀態(tài)。

    如果我們希望獲取HTTP響應(yīng)的網(wǎng)絡(luò)狀態(tài),可以通過(guò)status和statusText來(lái)獲取

    • status是獲取狀態(tài)碼
    • statusText是獲取狀態(tài)描述
    const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response)// 1.獲取狀態(tài)碼console.log(xhr.status) // 200// 2.獲取狀態(tài)描述console.log(xhr.statusText) // OK })xhr.responseType = "json"xhr.open("get", "http://123.207.32.32:8000/home/multidata")xhr.send()

    我們寫一個(gè)不存在的接口, 測(cè)試一下狀態(tài)碼和狀態(tài)描述

    const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response) // null// 1.獲取狀態(tài)碼console.log(xhr.status) // 404// 2.獲取狀態(tài)描述console.log(xhr.statusText) // Not Found })xhr.responseType = "json"xhr.open("get", "http://123.207.32.32:8000/aaa/bbb/ccc")xhr.send()

    大家可以再看看剛剛的常用狀態(tài)碼表格

    常見HTTP狀態(tài)碼狀態(tài)描述信息說(shuō)明
    200OK客戶端請(qǐng)求成功
    201CreatedPOST請(qǐng)求,創(chuàng)建新的資源
    301Moved Permanently請(qǐng)求資源的URL已經(jīng)修改,響應(yīng)中會(huì)給出新的URL
    400Bad Request客戶端的錯(cuò)誤,服務(wù)器無(wú)法或者不進(jìn)行處理
    401Unauthorized未授權(quán)的錯(cuò)誤,必須攜帶請(qǐng)求的身份信息
    403Forbidden客戶端沒(méi)有權(quán)限訪問(wèn),被拒接
    404Not Found服務(wù)器找不到請(qǐng)求的資源。
    500Internal Server Error服務(wù)器遇到了不知道如何處理的情況。
    503Service Unavailable服務(wù)器不可用,可能處理維護(hù)或者重載狀態(tài),暫時(shí)無(wú)法訪問(wèn)

    3.7 GET/POST傳遞參數(shù)

    在開發(fā)中,我們使用最多的是GET和POST請(qǐng)求,在發(fā)送請(qǐng)求的過(guò)程中,我們也可以傳遞給服務(wù)器數(shù)據(jù)。

    常見的傳遞給服務(wù)器數(shù)據(jù)的方式有如下幾種 :

    • 方式一:GET請(qǐng)求的query參數(shù)(常用)

      const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {// 傳入的參數(shù)服務(wù)器會(huì)返回console.log(xhr.response) })xhr.responseType = "json"// 在傳入的url輸入查詢字符串傳遞參數(shù) xhr.open("get", "http://123.207.32.32:1888/02_param/get?name=kaisa&age=18&address=成都市" )xhr.send()

      請(qǐng)求結(jié)果

    • 方式二:POST請(qǐng)求 x-www-form-urlencoded 格式

      const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response) })xhr.responseType = "json"// 1.發(fā)送post請(qǐng)求 xhr.open("post", "http://123.207.32.32:1888/02_param/posturl")// 2.告知服務(wù)器要發(fā)送數(shù)據(jù)的格式 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded") // 3.在請(qǐng)求體中傳入?yún)?shù) xhr.send("name=kaisa&age=18&address=成都市")

      請(qǐng)求結(jié)果

    • 方式三:POST請(qǐng)求 FormData 格式

    • 方式四:POST請(qǐng)求 JSON 格式(常用)

      const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response) })xhr.responseType = "json"// 1.發(fā)送post請(qǐng)求 xhr.open("post", "http://123.207.32.32:1888/02_param/posturl")// 2.告知服務(wù)器要發(fā)送數(shù)據(jù)的格式 xhr.setRequestHeader("Content-type", "application/json")// 3.發(fā)送JSON格式的字符串 xhr.send(JSON.stringify({ name: "kaisa", age: 18, height: 1.88 }))

      請(qǐng)求結(jié)果

    4.AJAX網(wǎng)絡(luò)請(qǐng)求封裝

    在實(shí)際開發(fā)中, 我們并不會(huì)自己封裝AJAX, 而是直接使用axios庫(kù), 再對(duì)axios庫(kù)進(jìn)行二次封裝

    我們封裝AJAX原因是借此練習(xí)一下前面所學(xué)的知識(shí)

    由于我們每次使用網(wǎng)絡(luò)請(qǐng)求, 都寫寫很多行同樣的代碼, 使用起來(lái)是非常不方便的, 我們封裝的目的就是為了使用起來(lái)更方便

    封裝步驟的解釋寫在代碼注釋里面, 源代碼和測(cè)試代碼給大家

    // 定義一個(gè)函數(shù)封裝ajax, // 由于使用參數(shù)可能會(huì)傳很多個(gè), 因此我們可以讓使用者傳入一個(gè)對(duì)象 function myajax({url,method = "get",date = {},success,failure } = {}) {// 1.創(chuàng)建對(duì)象const xhr = new XMLHttpRequest()// 2.監(jiān)聽數(shù)據(jù)xhr.onload = function() {// 用響應(yīng)碼判斷是否成功if (xhr.status >= 200 && xhr.status < 300) {success && success(xhr.response)} else {failure && failure({ status: xhr.status, message: xhr.statusText })}}// 3.設(shè)置響應(yīng)類型xhr.responseType = "json"// 考慮get請(qǐng)求放在date對(duì)象中的情況單獨(dú)處理if (method.toUpperCase() === "GET") {const urlStrings = []for (key in date) {urlStrings.push(`${key}=${date[key]}`)}url = url + "?" + urlStrings.join("&")xhr.open(method, url)xhr.send()} else {// 4.open方法xhr.open(method, url)// 5.send方法xhr.setRequestHeader("Content-type", "application/json")xhr.send(JSON.stringify(date))} }// 測(cè)試get請(qǐng)求 myajax({url: "http://123.207.32.32:1888/02_param/get",date: {name: "get",age: 18},// 傳入一個(gè)請(qǐng)求成功的回調(diào)success: function(res) {console.log(res)},// 傳入失敗的回調(diào)failure: function(err) {console.log("err", err)} })// 測(cè)試post請(qǐng)求 myajax({url: "http://123.207.32.32:1888/02_param/posturl",method: "post",// 傳入一個(gè)請(qǐng)求成功的回調(diào)success: function(res) {console.log(res)},date: {name: "post",age: 18},// 傳入失敗的回調(diào)failure: function(err) {console.log("err", err)} })

    我們對(duì)上面的基本封裝做一點(diǎn)優(yōu)化, 為了防止回調(diào)地獄的情況出現(xiàn), 我們可以返回一個(gè)promise, 并且不需要再傳入成功的回調(diào)和失敗的回調(diào), 因?yàn)閜romise中有

    function myajax({url,method = "get",date = {} } = {}) {// 返回一個(gè)promisereturn new Promise((resolve, reject) => {const xhr = new XMLHttpRequest() xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {// 使用resolve成功的回調(diào)resolve(xhr.response)} else {// 使用reject失敗的回調(diào)reject({ status: xhr.status, message: xhr.statusText })}} xhr.responseType = "json" if (method.toUpperCase() === "GET") {const urlStrings = []for (key in date) {urlStrings.push(`${key}=${date[key]}`)}url = url + "?" + urlStrings.join("&") xhr.open(method, url)xhr.send()} else {xhr.open(method, url) xhr.setRequestHeader("Content-type", "application/json")xhr.send(JSON.stringify(date))}}) }// 測(cè)試get請(qǐng)求 myajax({url: "http://123.207.32.32:1888/02_param/get",date: {name: "get",age: 18} // then中成功的結(jié)果 }).then(res => {console.log(res) // catch中失敗的結(jié)果 }).catch(err => {console.log(err) })// 測(cè)試post請(qǐng)求 myajax({url: "http://123.207.32.32:1888/02_param/posturl",method: "post",date: {name: "post",age: 18} // then中成功的結(jié)果 }).then(res => {console.log(res) // catch中失敗的結(jié)果 }).catch(err => {console.log(err) })

    補(bǔ)充: 過(guò)期時(shí)間和取消請(qǐng)求

    下面我用的是一個(gè)延時(shí)的接口

    過(guò)期時(shí)間

    在網(wǎng)絡(luò)請(qǐng)求的過(guò)程中,為了避免過(guò)長(zhǎng)的時(shí)間服務(wù)器無(wú)法返回?cái)?shù)據(jù),通常我們會(huì)為請(qǐng)求設(shè)置一個(gè)超時(shí)時(shí)間:timeout

    • 當(dāng)達(dá)到超時(shí)時(shí)間后依然沒(méi)有獲取到數(shù)據(jù),那么這個(gè)請(qǐng)求會(huì)自動(dòng)被取消掉
    • 默認(rèn)值為0,表示沒(méi)有設(shè)置超時(shí)時(shí)間;

    下面寫個(gè)案例, 如果超過(guò)3000毫秒沒(méi)有請(qǐng)求到數(shù)據(jù)就取消本次網(wǎng)絡(luò)請(qǐng)求

    • 請(qǐng)求超時(shí)可以在timeout中監(jiān)聽
    const xhr = new XMLHttpRequest()xhr.addEventListener("load", function() {console.log(xhr.response) })// 請(qǐng)求超時(shí)可以在timeout中監(jiān)聽 xhr.addEventListener("timeout", function() {console.log("請(qǐng)求超時(shí)") })xhr.responseType = "json"xhr.timeout = 3000xhr.open("get", "http://123.207.32.32:1888/01_basic/timeout")xhr.send()

    取消請(qǐng)求

    取消網(wǎng)絡(luò)請(qǐng)求, 我們也可以通過(guò)abort方法強(qiáng)制 (手動(dòng)) 取消請(qǐng)求

    • 請(qǐng)求取消可以在abort中監(jiān)聽
    <button>取消請(qǐng)求</button><script>const xhr = new XMLHttpRequest() xhr.addEventListener("load", function() {console.log(xhr.response)}) // 請(qǐng)求取消可以在abort中監(jiān)聽xhr.addEventListener("abort", function() {console.log("請(qǐng)求已取消")}) xhr.responseType = "json" xhr.timeout = 3000 xhr.open("get", "http://123.207.32.32:1888/01_basic/timeout") xhr.send() // 監(jiān)聽按鈕點(diǎn)擊取消請(qǐng)求const btnEl = document.querySelector("button")btnEl.onclick = function() {xhr.abort()} </script>

    5.Fetch使用和上傳文件

    5.1 Fetch基本使用

    Fetch可以看做是早期的XMLHttpRequest的替代方案,它提供了一種更加現(xiàn)代的處理方案:

    比如返回值是一個(gè)Promise,提供了一種更加優(yōu)雅的處理結(jié)果方式

    • 在請(qǐng)求發(fā)送成功時(shí),調(diào)用resolve回調(diào)then;
    • 在請(qǐng)求發(fā)送失敗時(shí),調(diào)用reject回調(diào)catch;

    比如不像XMLHttpRequest一樣,所有的操作都在一個(gè)對(duì)象上

    fetch函數(shù)的使用

    fetch(input[, init])

    input:定義要獲取的資源地址,可以是一個(gè)URL字符串,也可以使用一個(gè)Request對(duì)象(實(shí)驗(yàn)性特性)類型;

    init:其他初始化參數(shù), 是一個(gè)對(duì)象

    • method: 請(qǐng)求使用的方法,如 GET、POST;
    • headers: 請(qǐng)求的頭信息;
    • body: 請(qǐng)求的 body 信息;

    【演示代碼】

    發(fā)送一個(gè)get請(qǐng)求(先了解一下 馬上會(huì)詳細(xì)分析)

    fetch("http://123.207.32.32:8000/home/multidata").then(res => {// 獲取具體的結(jié)果還需調(diào)用一次// 如果是文本就res.text, 其他的同樣的道理res.json().then(res => {console.log(res)}) }).catch(err => {console.log(err) })

    5.2 Fetch數(shù)據(jù)的響應(yīng)

    Fetch的數(shù)據(jù)響應(yīng)主要分為兩個(gè)階段 :

    階段一:當(dāng)服務(wù)器返回了響應(yīng)(response)

    • fetch 返回的 promise 就使用內(nèi)建的 Response class 對(duì)象來(lái)對(duì)響應(yīng)頭進(jìn)行解析;
    • 在這個(gè)階段,我們可以通過(guò)檢查響應(yīng)頭,來(lái)檢查 HTTP 狀態(tài)以確定請(qǐng)求是否成功;
    • 如果 fetch 無(wú)法建立一個(gè) HTTP 請(qǐng)求,例如網(wǎng)絡(luò)問(wèn)題,亦或是請(qǐng)求的網(wǎng)址不存在,那么 promise 就會(huì) reject;
    • 異常的 HTTP 狀態(tài),例如 404 或 500,不會(huì)導(dǎo)致出現(xiàn) error;

    我們可以在 response 的屬性中看到 HTTP 狀態(tài)

    • status:HTTP 狀態(tài)碼,例如 200;
    • ok:布爾值,如果 HTTP 狀態(tài)碼為 200-299,則為 true;
    fetch("http://123.207.32.32:8000/home/multidata").then(res => {// response中查看狀態(tài)碼, 狀態(tài)描述console.log(res.status) // 200console.log(res.statusText) // OKconsole.log(res.ok) // true}).catch(err => {console.log(err) })

    第二階段,為了獲取 response body,我們需要使用一個(gè)其他的方法調(diào)用, 這個(gè)方法同樣返回Promise。

    • response.text() —— 讀取 response,并以文本形式返回 response
    • response.json() —— 將 response 解析為 JSON
    fetch("http://123.207.32.32:8000/home/multidata").then(res => {// 第二階段, 同樣返回Promiseres.json().then(res => {// 拿到最終結(jié)果console.log(res)})}).catch(err => {console.log(err) })

    5.3 Fetch網(wǎng)絡(luò)請(qǐng)求的演練

    基于Promise的使用方案

    fetch("http://123.207.32.32:8000/home/multidata").then(res => {// 獲取具體的結(jié)果還需調(diào)用一次// 如果是文本就res.text, 其他的同樣的道理return res.json() }).then(res => {console.log(res) }).catch(err => {console.log(err) })

    基于async、await的使用方案

    async function getDate() {const response1 = await fetch("http://123.207.32.32:8000/home/multidata")const response2 = await response1.json()// 打印結(jié)果console.log(response2) }getDate()

    5.4 Fetch POST請(qǐng)求

    創(chuàng)建一個(gè) POST 請(qǐng)求,或者其他方法的請(qǐng)求,我們需要使用 fetch 選項(xiàng)

    method:HTTP 方法,例如 POST,

    body:request body,其中之一:

    • 字符串(例如 JSON 編碼的),
    • FormData 對(duì)象,以 multipart/form-data 形式發(fā)送數(shù)據(jù),
    async function getDate() {// post請(qǐng)求需要在fetch方法中傳入第二個(gè)參數(shù)const response1 = await fetch("http://123.207.32.32:1888/02_param/postjson",{method: "post",headers: {"Content-type": "application/json"},// 參數(shù)防砸body中body: JSON.stringify({username: "aaa",postname: "123456"})})const response2 = await response1.json()// 打印結(jié)果console.log(response2) }getDate() fetch("http://123.207.32.32:8000/home/multidata")const response2 = await response1.json()// 打印結(jié)果console.log(response2) }getDate()

    5.4 Fetch POST請(qǐng)求

    創(chuàng)建一個(gè) POST 請(qǐng)求,或者其他方法的請(qǐng)求,我們需要使用 fetch 選項(xiàng)

    method:HTTP 方法,例如 POST,

    body:request body,其中之一:

    • 字符串(例如 JSON 編碼的),
    • FormData 對(duì)象,以 multipart/form-data 形式發(fā)送數(shù)據(jù),
    async function getDate() {// post請(qǐng)求需要在fetch方法中傳入第二個(gè)參數(shù)const response1 = await fetch("http://123.207.32.32:1888/02_param/postjson",{method: "post",headers: {"Content-type": "application/json"},// 參數(shù)防砸body中body: JSON.stringify({username: "aaa",postname: "123456"})})const response2 = await response1.json()// 打印結(jié)果console.log(response2) }getDate()

    總結(jié)

    以上是生活随笔為你收集整理的网络编程-JavaScript中发送网络请求汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    h动漫中文字幕 | 一区二区三区电影大全 | 中日韩在线 | 看片一区二区三区 | 午夜性色 | 99国内精品久久久久久久 | 国产视频久久久 | 激情五月在线观看 | 不卡的av电影在线观看 | 天天天天天天干 | 香蕉精品在线观看 | 久久99精品国产 | 午夜精品久久久久久久99无限制 | 婷婷色 亚洲 | 国产高清在线精品 | 午夜精品一区二区三区可下载 | 深夜视频久久 | 久久久久国产免费免费 | 国产高清黄色 | 国产一区二区精 | 青青网视频 | 久久精品国产精品亚洲 | av网址最新 | 久久精品国产第一区二区三区 | 久草爱视频 | 亚洲精品国产第一综合99久久 | 超碰在线色 | 久久99这里只有精品 | 婷婷激情小说网 | 13日本xxxxxⅹxxx20 | japanese黑人亚洲人4k | 国产黄色免费看 | 久久超| 国产在线观看地址 | 欧美尹人| 91网在线 | 日韩手机在线观看 | 91午夜精品| 国产精品女人网站 | 在线观看91视频 | 久久一区二区免费视频 | 欧美韩日精品 | 久久夜色电影 | 99久久网站| 超碰97在线看| 国产精品久久久久久久久久99 | 黄色成人毛片 | 日韩欧美高清一区二区三区 | 开心激情婷婷 | 日本精品久久久久中文字幕 | 超碰在线人人 | 精品国产视频一区 | 色综合亚洲精品激情狠狠 | 国产精品粉嫩 | 五月婷婷视频 | 免费日韩 精品中文字幕视频在线 | 久久亚洲区 | 欧美一二区视频 | 在线视频第一页 | 超碰在线天天 | 国产精品久久久久久一区二区三区 | 欧美日韩国产一区 | 国产精品免费视频一区二区 | 久草视频一区 | 日日操天天爽 | 久久电影国产免费久久电影 | 粉嫩av一区二区三区四区五区 | 99精品国产在热久久下载 | 欧洲精品久久久久毛片完整版 | 婷婷久久久久 | 国内一级片在线观看 | 91精品久久久久久久久久久久久 | 国产精品美女久久久久久 | 丝袜美腿在线 | 久久综合九色综合97_ 久久久 | 久久国产精品久久精品 | www.天天色.com | 成人观看视频 | 久色小说 | 日韩一区二区免费在线观看 | 国产中文字幕视频在线观看 | 丁香资源影视免费观看 | 四虎www | 97精品国产一二三产区 | 中文字幕乱偷在线 | 在线免费观看的av网站 | 国产高清日韩欧美 | 日日日爽爽爽 | 久久国产精品久久久久 | 伊人午夜 | 久久久久99999 | 成人小视频在线播放 | 中文字幕在线观看免费 | 精品久久久久亚洲 | 日韩免费电影网 | 91中文在线视频 | 9999精品免费视频 | 91正在播放 | 人人爽久久涩噜噜噜网站 | 伊人色综合久久天天网 | 精品欧美一区二区精品久久 | 综合精品在线 | 在线观看中文字幕2021 | 在线国产激情视频 | 免费av网站观看 | 中文字幕视频免费观看 | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品嫩草影院123 | 嫩草av影院 | 久久99亚洲精品久久 | 日日摸日日碰 | 国产成人av一区二区三区在线观看 | 欧美亚洲精品一区 | 久草视频中文 | 高清在线观看av | 在线免费观看亚洲视频 | 精品久久久久久久久久久院品网 | 欧美91片| 狠狠撸电影 | 黄p在线播放| 天天干天天怕 | 国产精品久久久久久久免费 | 中文字幕有码在线 | 国产欧美日韩精品一区二区免费 | 国精产品999国精产 久久久久 | 在线视频麻豆 | 久久涩视频 | 91在线影院 | 日韩在线免费看 | 国产精品青草综合久久久久99 | 美女激情影院 | 日本中文一区二区 | 久久精品久久久久 | 色综合久久综合网 | 成人在线观看免费视频 | 99久久精品免费看国产一区二区三区 | 91九色视频网站 | 久久久久久国产精品999 | 免费在线观看中文字幕 | 国产 在线 日韩 | 久久久麻豆精品一区二区 | 天天av天天 | 国产在线观看,日本 | 五月婷婷丁香六月 | 2019中文| 日本91在线| 91网页版免费观看 | 精品久久久成人 | 日韩av在线免费播放 | 国产亚洲在| 综合色爱 | 国产中文字幕在线观看 | a级免费观看 | 就要干b| 久久久蜜桃 | 九草视频在线观看 | 97超碰人人爱 | 国产91九色蝌蚪 | 97av在线视频免费播放 | 亚洲成av人片在线观看 | 91久久国产综合精品女同国语 | 国产99久久九九精品免费 | 国产亚州精品视频 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 中文字幕在线观看免费观看 | 少妇精69xxtheporn | 香蕉视频在线网站 | 成人影音av | 日韩视频一区二区三区在线播放免费观看 | 国产三级av在线 | 免费欧美精品 | 成人观看 | 美女在线免费观看视频 | 精品美女视频 | 99自拍视频在线观看 | 精品专区一区二区 | 国产一级黄色片免费看 | 国产精品自产拍 | 久久精品国亚洲 | 欧美日韩亚洲第一页 | 免费精品视频在线观看 | 伊人亚洲精品 | 天天干.com | 国产精品 9999 | 日韩美在线 | 久草在线手机视频 | 黄色网址国产 | 久久se视频 | 免费看污片 | 色视频网站在线观看一=区 a视频免费在线观看 | 天天摸天天弄 | 国产精品黄色影片导航在线观看 | 国产高清视频在线播放 | 免费人做人爱www的视 | 免费在线观看黄网站 | 乱男乱女www7788 | 色婷婷播放 | 久久久在线免费观看 | www日| 麻豆视频国产 | 婷婷社区五月天 | 五月天色综合 | 911av视频| 91超在线 | 五月在线视频 | 97人人人人 | 欧美精品久久久久久久久久丰满 | 色综合网 | 国产成人三级在线观看 | 日韩av片免费在线观看 | 超碰在线个人 | 久九视频 | 一本一本久久aa综合精品 | 午夜的福利 | 国产手机av | 在线观看成人 | 在线免费高清 | 奇米四色影狠狠爱7777 | 丁香六月婷婷 | 大胆欧美gogo免费视频一二区 | 成人国产在线 | 免费欧美| 国产伦理剧 | 国产成人av福利 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 美女网色 | 国产999 | 69国产成人综合久久精品欧美 | 免费在线观看黄网站 | 国产理论一区二区三区 | 中文字幕久久精品亚洲乱码 | 午夜精品在线看 | 日本天天色 | 欧美片一区二区三区 | 国产亚洲精品久久 | 国产精品第7页 | 国产日产欧美在线观看 | 91丨九色丨国产在线观看 | 午夜视频在线观看网站 | 亚洲国产成人久久综合 | 久久伊人精品天天 | 国产精品嫩草影院9 | 成年美女黄网站色大片免费看 | 丁香综合五月 | 欧美日韩另类在线 | 欧美日韩国产在线精品 | 天天综合网天天 | 国产在线1区 | 91视频免费 | 808电影免费观看三年 | 麻豆一区二区三区视频 | 国产成人在线看 | 91在线91| 免费高清在线一区 | 成人免费视频播放 | 亚洲国产综合在线 | 国产不卡在线看 | av.com在线 | 国产剧情在线一区 | 毛片网站在线看 | 天天射天天干天天 | 狠狠色狠狠色合久久伊人 | 国产高清视频 | 国产韩国日本高清视频 | 国产一性一爱一乱一交 | av千婊在线免费观看 | 国产超碰在线 | www欧美xxxx | 日韩高清一区 | 亚洲欧美综合精品久久成人 | 五月天网页 | 精品国产精品国产偷麻豆 | 国产成人精品一二三区 | 黄色av网站在线免费观看 | 五月天狠狠操 | 亚洲激情在线观看 | 黄a在线看| 人人爽人人爱 | 中文字幕成人av | 国产露脸91国语对白 | 中文字幕精品一区久久久久 | 欧美夫妻性生活电影 | 色综合狠狠干 | 国产成人区 | 欧美色婷 | 欧美a级在线免费观看 | 国产 日韩 中文字幕 | 欧美一级xxxx | 欧美视频在线二区 | 久久伊人爱 | 欧美极品少妇xbxb性爽爽视频 | 国产视频在 | 97在线精品国自产拍中文 | 天天射天天干天天 | 国产精品24小时在线观看 | 青青草国产免费 | 97在线精品国自产拍中文 | 亚洲国产午夜精品 | 99re6热在线精品视频 | 国内久久久久久 | 中文字幕 在线看 | 91视频免费看 | 在线香蕉视频 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲麻豆精品 | 91人人爽久久涩噜噜噜 | 毛片888 | 欧美天天综合网 | 特级西西人体444是什么意思 | 欧美午夜理伦三级在线观看 | 欧美性色网站 | 成人在线免费视频观看 | 天天舔天天射天天操 | 亚洲乱码精品 | 国产女人40精品一区毛片视频 | 一区二区视频在线免费观看 | 日韩免费视频线观看 | 日韩精品一区二区三区水蜜桃 | 亚洲jizzjizz日本少妇 | 中文字幕 第二区 | 国产精品不卡在线 | 国产亚洲成av片在线观看 | 久草av在线播放 | 久久精品一二三 | 久久久久久久久精 | 国产男男gay做爰 | 99久久精品免费看国产四区 | 日韩欧美在线视频一区二区 | 亚洲第一香蕉视频 | 四虎国产精品免费 | 欧美日韩精品综合 | 久久久久久片 | 毛片的网址 | 国产原厂视频在线观看 | 成人毛片一区 | 麻豆影视网站 | 伊人婷婷在线 | 国产亚洲va综合人人澡精品 | 99国产精品久久久久久久久久 | 激情欧美日韩一区二区 | 丁香六月天 | 天堂资源在线观看视频 | 久久精品视频国产 | 中文字幕免费播放 | 在线观看网站av | 中文字幕在线看视频国产中文版 | 婷婷激情综合五月天 | 欧美日韩视频在线观看一区二区 | 97在线看| 91av免费在线观看 | 97国产精品 | 在线视频精品 | 国产黄色精品在线 | 国产综合久久 | 人人人爽 | 国产精品免费在线 | 天天舔天天搞 | 一本一道久久a久久精品 | 日韩中字在线 | 九九久久婷婷 | 国产成人久久精品 | 欧美9999 | 亚洲精品视频中文字幕 | 国产手机视频在线播放 | 国产资源网 | 久久高视频 | 在线观看中文字幕视频 | 高清精品在线 | 日本黄色a级大片 | 亚洲精品tv久久久久久久久久 | 91视频免费观看 | 亚洲一区免费在线 | 色播激情五月 | 午夜久久 | 亚洲男模gay裸体gay | 日韩经典一区二区三区 | 国产精品毛片久久久久久久 | 免费久久视频 | 成人午夜电影网站 | 五月婷婷在线综合 | 天天干天天干天天干天天干天天干天天干 | 亚洲欧洲在线视频 | 毛片美女网站 | 中文字幕人成不卡一区 | 欧美日韩亚洲第一页 | 久久手机看片 | 成人教育av | 国产精品入口麻豆www | 国产韩国日本高清视频 | 欧美一区二视频在线免费观看 | 国产免码va在线观看免费 | 黄色精品久久 | 天天射综合网视频 | 99精品视频在线观看 | 91精品国产九九九久久久亚洲 | 国产精品视频一二三 | 亚洲一区久久 | 久草网视频在线观看 | 日韩理论片 | 日韩精品久久久 | 免费a级毛片在线看 | 在线观看日韩免费视频 | 久久久久久看片 | 中文字幕91| 中文字幕 国产视频 | 日本中文字幕在线免费观看 | 日韩视频一区二区三区 | 人人爽人人看 | 亚洲激精日韩激精欧美精品 | 91爱爱视频 | 久久国产精品99久久久久久进口 | 欧美性久久久 | 在线观看日韩 | 丝袜美女在线观看 | 人人澡人人澡人人 | 色精品视频 | 亚洲久草在线视频 | 丁香婷婷色综合亚洲电影 | 中文在线a√在线 | 欧美视频18 | 亚洲一级性| 国产一二三在线视频 | 女人18精品一区二区三区 | 久久精品视频日本 | 国产精品欧美一区二区三区不卡 | 欧美激精品| 国产一级视屏 | 午夜精品久久久久久久爽 | 国产第一页精品 | 成人一区二区三区在线观看 | 五月天激情电影 | 国产精品免费久久久久 | 久草视频免费观 | 色噜噜色噜噜 | 麻豆视频免费在线播放 | 成人黄色免费观看 | h动漫中文字幕 | 国产在线97 | 少妇bbb | 美女网色 | 久久综合狠狠综合久久狠狠色综合 | 天天干天天操天天做 | www.色婷婷.com| 色偷偷88888欧美精品久久 | 日韩网站一区 | 黄色网址a | 91av在线国产| 777视频在线观看 | 欧美资源| www.人人草| 亚洲色五月 | 国产精品 中文字幕 亚洲 欧美 | 99热这里只有精品免费 | 日韩欧美精品一区二区三区经典 | 一区二区三区国产精品 | 中文字幕在线观看2018 | 日日干夜夜操视频 | 69国产盗摄一区二区三区五区 | 97超碰在线人人 | 午夜婷婷在线播放 | 97人人超碰在线 | 日本久久影视 | 91成人在线观看高潮 | 丁香视频五月 | 国产区免费在线 | 亚洲欧美日本国产 | 日韩精品一区二区三区免费观看视频 | 免费特级黄色片 | 久草在线综合 | 国产日韩av在线 | 日韩欧美一区二区三区在线 | 天天色宗合 | 日韩av影片在线观看 | 色a综合 | 国产精品一二三 | 日批网站在线观看 | 九九热有精品 | 久久久久久久久久毛片 | 天天插综合网 | 国产欧美精品xxxx另类 | 九九九九精品 | avwww在线观看 | 免费性网站 | 麻豆首页 | 久久影院一区 | 超碰人人草 | 亚洲免费av片 | 国产精品99蜜臀久久不卡二区 | av大全在线观看 | 日日草夜夜操 | 日韩成人xxxx | 狠狠躁夜夜a产精品视频 | 国内精品在线一区 | 九九av| 97视频人人免费看 | 色天天综合久久久久综合片 | 爱色婷婷 | 在线性视频日韩欧美 | 久99热| 免费观看成年人视频 | 丝袜av一区 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 中文字幕乱偷在线 | 日韩天天操 | 97超碰在线免费观看 | 99re久久资源最新地址 | 国产色啪| 日本最新高清不卡中文字幕 | 午夜精品视频一区二区三区在线看 | 国产一区精品在线 | 丁香在线视频 | 亚洲精品免费在线观看 | 98福利在线 | 91精品啪啪| 99久久久久久久 | 草在线视频 | 五月婷婷一区二区三区 | 日韩一级成人av | 91在线你懂的 | 丁香婷婷电影 | 亚洲首页| 亚洲精品久久久久999中文字幕 | 18做爰免费视频网站 | 欧美综合久久久 | 97日日碰人人模人人澡分享吧 | 欧美性色xo影院 | 深爱婷婷久久综合 | 亚洲激情久久 | 午夜国产福利视频 | 992tv在线成人免费观看 | 综合色亚洲 | 91成人精品一区在线播放69 | 在线日本看片免费人成视久网 | 国产精品专区在线观看 | 国产青青青 | 午夜av免费在线观看 | 欧美精品亚洲精品日韩精品 | 成人中文字幕+乱码+中文字幕 | 久久爱资源网 | 免费亚洲电影 | 天天干天天想 | 狂野欧美激情性xxxx | 97超碰人人模人人人爽人人爱 | 97人人模人人爽人人喊网 | 在线亚洲天堂网 | www免费网站在线观看 | 亚洲专区欧美专区 | 久久久久国产一区二区三区 | 免费在线a | 国产精品日韩欧美一区二区 | 国产自偷自拍 | 免费色黄 | 欧美日韩精品免费观看视频 | 久久无码精品一区二区三区 | 国产亚洲亚洲 | 黄色的视频网站 | 精品一区二区电影 | 亚洲aⅴ一区二区三区 | 国产精品k频道 | 天天天操天天天干 | www视频免费在线观看 | 五月婷婷另类国产 | 欧美淫aaa免费观看 日韩激情免费视频 | 国产精品久久久久久久毛片 | 二区在线播放 | 美女免费视频观看网站 | 超碰国产在线 | 99久久婷婷国产一区二区三区 | 国产精品久久久影视 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 99久久成人 | 在线视频日韩一区 | 在线看免费 | 天天做综合网 | 欧美日韩国产色综合一二三四 | a√国产免费a| 国产理论一区二区三区 | 久久99久久99久久 | 一区二区激情 | 国产成人精品在线播放 | 亚洲一级黄色 | 日日夜夜骑 | 97久久精品午夜一区二区 | 成人免费xxx在线观看 | 国产精品国产精品 | 免费情趣视频 | 亚洲影视九九影院在线观看 | 久久影院亚洲 | 探花视频免费在线观看 | 人人爽人人搞 | 24小时日本在线www免费的 | 美女黄视频免费 | 一本一本久久a久久精品综合小说 | 97人人艹| 天天综合91| 欧美91精品久久久久国产性生爱 | a v在线视频 | 国产一二三区在线观看 | 啪啪小视频网站 | 天天干夜夜操视频 | 欧美孕妇视频 | 国语对白少妇爽91 | 欧美精品少妇xxxxx喷水 | 2023天天干 | 一区二区三区四区五区六区 | 视频一区视频二区在线观看 | 激情视频二区 | 色综合小说 | 人人干在线 | 国产成人1区| 九九爱免费视频 | 久草在线视频免赞 | 成人久久18免费网站图片 | 国产精品久久久久久久久久东京 | 激情欧美日韩一区二区 | 欧美91在线 | 亚州av一区 | 亚洲v精品 | 国产小视频免费观看 | 亚洲激色 | 人人爽久久久噜噜噜电影 | 亚洲精品动漫久久久久 | 一区二区中文字幕在线 | 免费中文字幕视频 | 欧美一区二区三区免费看 | 韩国av免费观看 | 国产999视频 | 国产精品久久久久久久午夜片 | 99精品国产99久久久久久97 | 亚洲一区不卡视频 | 九九99靖品 | 91香蕉视频色版 | 激情文学综合丁香 | 毛片激情永久免费 | 日日夜夜综合网 | 99精品在线免费观看 | av高清不卡 | 成年人免费观看在线视频 | 精品国产乱码久久久久久天美 | 国产无套视频 | 日韩成人精品一区二区 | 欧美激情第28页 | 成人黄色在线观看视频 | 视频国产区 | 日韩精品免费一区二区在线观看 | 51久久夜色精品国产麻豆 | 久久综合狠狠狠色97 | 综合久久久久久 | 国产中文在线观看 | 婷婷六月网| 亚洲精品国产精品久久99热 | 丁香激情视频 | 亚洲精品国内 | 黄色成人av在线 | 天天干,夜夜操 | 高清不卡一区二区在线 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | aaa亚洲精品一二三区 | 超碰在线天天 | 日本精品中文字幕在线观看 | 国产91成人 | 色噜噜噜 | 色综合久久88色综合天天6 | 成人在线视频在线观看 | 国产在线观看一 | 91c网站色版视频 | 国产亚洲精品福利 | 99爱精品在线 | 国产+日韩欧美 | 一区二区三区免费在线观看视频 | 日日躁夜夜躁aaaaxxxx | 欧美日韩精品在线视频 | 国产视频精品网 | 亚洲精品视频一二三 | 永久免费视频国产 | 婷婷国产v亚洲v欧美久久 | 久热超碰 | 日产中文字幕 | 久久男人影院 | 在线观看完整版 | 午夜精品福利一区二区 | 国产免费观看高清完整版 | 最近中文国产在线视频 | 天天射天 | 色综合天天视频在线观看 | www国产亚洲精品久久网站 | 精品久久久久久亚洲综合网 | 免费在线一区二区 | 欧美成人手机版 | 岛国av在线免费 | 亚洲高清视频在线观看免费 | 国产精品黄色影片导航在线观看 | 91av手机在线观看 | 99精品国产免费久久 | 免费在线观看成人av | 911久久香蕉国产线看观看 | 一区二区三区影院 | 岛国一区在线 | 国产成人av网址 | 在线中文字幕网站 | 久久久久久久久久免费 | 日批视频在线播放 | 婷婷色综 | 超碰在97| av播放在线| 91入口在线观看 | 九九免费在线视频 | 亚洲 欧美变态 另类 综合 | 欧美激情奇米色 | 午夜久久久久久久久 | 天天做天天爱天天综合网 | 欧美一级免费片 | 久久综合狠狠综合 | av千婊在线免费观看 | 日日干,天天干 | 看国产黄色大片 | 又色又爽又黄 | 五月天六月色 | 欧美色图一区 | 久久影视网 | 久久国内免费视频 | 色综合久久久久综合99 | 欧美性极品xxxx做受 | 在线观看电影av | av天天草 | 免费试看一区 | 中文字幕色播 | 亚洲日本精品视频 | 久久蜜桃av | 最新国产福利 | 日韩成人不卡 | 国产精品视频免费观看 | 国产精品破处视频 | 日韩黄色免费看 | 久久国产乱 | 狠狠精品 | 美女网站黄免费 | 亚洲精品美女免费 | 干狠狠| 国产精品一区二区免费 | av网站在线观看播放 | 国产一区在线播放 | 久久免费黄色网址 | 久久成人午夜视频 | 亚洲黄色一级视频 | 日韩成人在线一区二区 | 国产精国产精品 | 7777xxxx| 国产黄色免费电影 | 中文字幕中文字幕在线中文字幕三区 | 中文字幕一二三区 | 伊人国产在线播放 | 中文字幕国产一区二区 | 国产一级久久久 | 婷婷久久精品 | 日本精品一区二区三区在线观看 | 欧美在线日韩在线 | 在线观看免费观看在线91 | 91刺激视频 | 国产一区二区中文字幕 | 国产91九色蝌蚪 | 日韩v在线91成人自拍 | 欧美激情视频在线免费观看 | 久久精品亚洲精品国产欧美 | 综合网伊人 | 在线视频91| 午夜av一区二区三区 | 丝袜+亚洲+另类+欧美+变态 | 国产91精品看黄网站 | 国产女人免费看a级丨片 | 人人插人人费 | 五月婷婷黄色网 | 午夜婷婷综合 | 伊人成人精品 | 网站在线观看你们懂的 | 国产手机视频在线观看 | 亚洲高清视频在线观看 | 久久国产电影 | 欧美午夜剧场 | 在线视频日韩欧美 | 欧美aaaxxxx做受视频 | 日韩xxx视频| aⅴ视频在线| 亚洲精品视频大全 | 成人av资源网站 | www.黄色网.com | 久久九九九九 | 人人澡人人添人人爽一区二区 | 国产亚洲久久 | 三级黄色免费 | 日韩色区 | 欧美黑人巨大xxxxx | 国产麻豆精品一区二区 | 成人超碰97 | 日本黄色免费在线 | 亚洲涩涩一区 | 中文字幕 二区 | 日本久久久久久久久久久 | 中文字幕视频三区 | 在线观看电影av | av先锋中文字幕 | 免费看三片 | 在线a人v观看视频 | 久久久久一区二区三区四区 | 5月丁香婷婷综合 | 成年美女黄网站色大片免费看 | 国产精品美女久久久久久久 | 国产激情久久久 | 亚洲黑丝少妇 | 99精品国产免费久久久久久下载 | 色综合久久88色综合天天 | 国产色女人| 中文字幕在线影院 | 久久久久久久久久久久久国产精品 | 天天操月月操 | 日本女人的性生活视频 | 亚洲视频精选 | 免费福利片 | 亚洲人在线7777777精品 | 精品国产乱码久久久久久三级人 | www.色午夜,com | 亚洲天堂色婷婷 | 在线黄色av电影 | av免费片| 亚洲理论片在线观看 | 国产成人精品久久二区二区 | 久久99在线观看 | 久久免费视频6 | 国产69精品久久久久久久久久 | 深夜免费福利在线 | 国产视频一级 | 国产精品一区在线播放 | a级国产片 | 国产无区一区二区三麻豆 | 亚洲一区视频免费观看 | 97在线视频免费看 | 一区二区三区在线观看 | 97在线观看 | 国产精品日韩久久久久 | 久久综合中文色婷婷 | 国产黄色片免费观看 | 国产精品国产三级国产aⅴ入口 | 精品免费99久久 | 欧美日比视频 | 久久九九影视网 | 午夜精品福利一区二区三区蜜桃 | 亚洲视屏一区 | 国产麻豆电影在线观看 | 欧美在线观看禁18 | 99在线视频精品 | 国产黄色大片 | 在线国产欧美 | 超碰在线人 | 国产精品久久久久久a | 麻豆系列在线观看 | 狠狠操.com| 黄色.com| 蜜桃视频在线观看一区 | 欧美日韩18| 伊人网综合在线观看 | 在线欧美日韩 | 国产高清99 | 黄色一区二区在线观看 | 久久在现 | 天天亚洲综合 | 亚洲精区二区三区四区麻豆 | 色婷婷六月天 | 五月天色站 | 啪啪小视频网站 | 久精品视频免费观看2 | 中文字幕在线免费看 | 久久视了| 欧美日韩一区二区视频在线观看 | 五月婷婷综合网 | 伊人成人激情 | 欧美一级网站 | 欧美成人精品xxx | 日韩二区在线 | 五月天丁香 | av高清免费 | 成人av电影在线观看 | 久久夜夜操| 国产 色 | 在线日韩精品视频 | 欧美激情第十页 | 亚洲最新av网址 | 91中文字幕在线观看 | 免费日韩视频 | 天天操天天操天天操天天操天天操 | 一本色道久久综合亚洲二区三区 | 九色精品免费永久在线 | 欧美黄色免费 | 嫩草av在线 | 99精品视频网 | 久久久久久久久久久久影院 | 久久国产精品系列 | 色婷婷88av视频一二三区 | 久艹在线免费观看 | 麻豆久久精品 | 黄色免费大全 | 亚洲无毛专区 | 一区二区不卡高清 | 国产中文字幕三区 | 国产一区不卡在线 | 欧美精品在线视频 | 中文字幕在线免费播放 | 99re热精品视频 | 视频在线99re | 日本在线精品视频 | 六月丁香婷婷在线 | 韩国精品在线 | 伊人久久影视 | 999国内精品永久免费视频 | 182午夜在线观看 | 91精品黄色| 揉bbb玩bbb少妇bbb | 国产一区二区三区高清播放 | 毛片的网址 | 亚洲va综合va国产va中文 | 久草资源在线观看 | 91精品91| 少妇bbb搡bbbb搡bbbb | 五月开心六月婷婷 | 久久国产品 | 日韩精品中字 | 欧美a级一区二区 | 亚洲电影在线看 | 国产精品影音先锋 | 国产主播大尺度精品福利免费 | 久久免费视频精品 | 亚洲国产精品va在线看 | 日韩av资源在线观看 | 日日干天天插 | 亚洲精品美女在线 | 91精品伦理 | 国产精品短视频 | 丝袜美女在线 | 欧美三级免费 | 91亚洲精品视频 | 精品中文字幕在线播放 | 国产大片免费久久 | 美女视频是黄的免费观看 | 精品成人在线 | 草樱av| 久久久久9999亚洲精品 | 韩国在线一区二区 | 成年人免费av网站 | 亚洲精品高清视频在线观看 | 69av在线播放| 精品资源在线 | 播五月综合| 日日夜夜精品网站 | 国产精品av免费在线观看 | 日韩视频1 | av电影不卡在线 | 日韩欧美高清一区二区三区 | 美女黄濒 | 天天色天天干天天 | 91免费在线视频 | 探花视频在线观看免费 | 亚洲国产精彩中文乱码av | 亚洲视频1 | 日日爱视频 | 天天碰天天操视频 | 99视频精品 | 玖操| 91网址在线观看 | 成人一级| 欧美大片大全 | 国产精品v a免费视频 | 中文字幕一二三区 | 蜜桃视频成人在线观看 | 国产一级免费片 | 日日夜夜精品视频天天综合网 | 成人在线一区二区 | 久久成人福利 | 国模吧一区 | 久久精品一区二区三区国产主播 | 婷婷九月激情 | 久久黄色影院 | 少妇bbb搡bbbb搡bbbb | 欧美资源在线观看 | 超碰在线天天 | 91av美女| 色婷婷www | 操老逼免费视频 | 国产精彩在线视频 | 91尤物国产尤物福利在线播放 | 久久毛片网 | 日韩电影一区二区在线观看 | 欧亚日韩精品一区二区在线 | 免费高清在线观看电视网站 | 国产在线精品视频 | 免费精品人在线二线三线 | 精品视频久久 | 久久精品伊人 | 国产99一区| 男女视频国产 |