国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

XMLHTTPRequest屬性、方法、事件大全&詳解。

roadtogeek / 2490人閱讀

摘要:屬性方法事件整理大全。有嚴格安全限制。值描述將設為空字符串與設置為相同,是默認類型實際上是。默認值為空字符串只有當為時,對象上才有此屬性,此時才能調用,否則拋錯。以下種情況下值都為空字符串請求未完成請求失敗。

XMLHTTPRequest屬性、方法、事件整理大全。

xhr 對象的方法

open(method:string, url:string, async?:boolean=true, username?:string, password: string)

用于創建 HTTP 請求,但請求并未發送。

method, 請求類型,如 GETPOST 等,大小寫不敏感。

url, URL 地址

async, 是否異步,默認 true
若為同步請求時

xhr.timeout值必須為 0。

xhr.withCredentials值必須為 false。

xhr.responseType值必須為"",(text 也不允許)。

username, 用戶名,一般不用。

password, 密碼,一般不用。

send(body?:Object=null)

定義 HTTP 請求的數據( body ),當 methodGETHEAD 時,該參數忽略。body 可為 ArrayBufferBlob、Document(類似 XML 格式數據)、DOMString(字符串)、FormData(表單)。
ArrayBuffer、Blob、Document、DOMString、Formdata 詳細參考。
注意:body 參數會影響請求頭部的 content-type 默認值。

如果 dataDocument 類型,同時也是 HTML Document 類型,則 content-type 默認值為 text/html;charset=UTF-8 ;否則為 application/xml;charset=UTF-8;

如果 dataDOMString 類型,content-type 默認值為 text/plain;charset=UTF-8

如果 dataFormData 類型,content-type 默認值為 multipart/form-data; boundary=[xxx]

如果 data 是其他類型,則不會設置 content-type 的默認值

如果用 xhr.setRequestHeader()手動設置了中 content-type 的值,以上默認值就會被覆蓋。
若在斷網狀態下調用 xhr.send(data)方法,則會拋錯:Uncaught NetworkError: Failed to execute "send" on "XMLHttpRequest"。一旦程序拋出錯誤,如果不 catch 就無法繼續執行后面的代碼,所以調用 xhr.send(data)方法時,應該用 try-catch 捕捉錯誤。

try{
    xhr.send(data)
}catch(e) {
    //doSomething...
};

abort()

若請求已發出,則會終止請求,并將 readyState 置為 0.

調用后,應將 xhr 對象置為 null 以促進垃圾回收。由于內存原因,不建議重用 xhr 對象。
擴展閱讀:和瀏覽器異步請求取消相關的那些事

overrideMimeType(type:string)
重寫 response 的 content-type。功能如同 xhr.responseType,已可以摒棄。

setRequestHeader(header:string, value:string)

設置請求 HTTP 請求頭信息。如content-typecookieaccept-xxx等。

header 參數大小寫不敏感。

必須在open()方法后,send()方法前調用,否則會拋錯。

可調用多次,最終值不會覆蓋,而是采用追加append方式。

禁止設置以下請求頭,否則會拋錯。

Accept-Charset

Accept-Encoding

Access-Control-Request-Headers

Access-Control-Request-Method

Connection

Content-Length

Cookie

Cookie2

Date

DNT

Expect

Host

Keep-Alive

Origin

Referer

TE

Trailer

Transfer-Encoding

Upgrade

User-Agent

Via

getResponseHeader(header:string)

獲取某個指定 header 字段的值。

header 字段不區分大小寫。

有嚴格安全限制,詳見getAllResponseHeaders方法。

getAllResponseHeaders()

獲取 response 中所有 header 字段。

有嚴格安全限制。如下:

無論跨域或同域請求,無法獲取Set-CookieSet-Cookie2字段值。

跨域請求,只可獲取simple response headerAccess-Control-Expose-Headers(名詞解釋見下方),否則會報錯:Refused to get unsafe header。故若想訪問其他字段,需后端添加到 Access-Control-Expose-Headers 中。

simple response header 包括的 header 字段有:Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma

> `Access-Control-Expose-Headers`:跨域請求獨有,同域請求無。該字段中列舉的 `header` 字段為服務器允許暴露給客戶端訪問的字段。
> 句法:```Access-Control-Expose-Headers: , , ...```
xhr 的屬性

readyState
[只讀屬性]用于追蹤 xhr 當前的狀態,共有 5 種可能的值,分別對應 xhr不同的階段。
每次 readyState 值變化時,都會觸發 xhr.onreadystatechange 事件。

狀態 描述
0 UNSENT (初始狀態,未打開) 此時 xhr 對象被成功構造, open() 方法還未被調用
1 OPENED (已打開,未發送) open() 方法已被成功調用,send() 方法還未被調用。注意:只有 xhr 處于 OPENED 狀態,才能調用 xhr.setRequestHeader()xhr.send() ,否則會報錯
2 HEADERS_RECEIVED (已獲取響應頭) send() 方法已經被調用, 響應頭和響應狀態已經返回
3 LOADING (正在下載響應體) 響應體( response entity body )正在下載中,此狀態下 xhr.response 可能已經有了響應數據
4 DONE (整個數據傳輸過程結束) 整個數據傳輸過程結束,不管本次請求是成功還是失敗

statusstatusText
status 屬性表示 HTTP 響應狀態碼,如 200302400等。
statusText 屬性表示 HTTP響應狀態的描述文本,如 OKNot Found等。
注意,在 xhr.onload 事件中,不能簡單的判斷 xhr.status === 200,因為 20x304HTTP 狀態碼也被認為是請求成功。
參考以下代碼:

  xhr.onload = function () {
  //如果請求成功
  if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
    //do successCallback
  }
}

responseTyperesponse
可在 xhr.send() 前設置 responseType ,用于指定返回的響應數據類型。和 xhr.overrideMimeType() 方法效果相同,推薦使用 responseType

IE10/IE11 不支持 xhr.responseTypejson

部分瀏覽器不支持 xhr.responseTypeblob

描述
"" responseType 設為空字符串與設置為 text 相同, 是默認類型 (實際上是 DOMString )。
arraybuffer response 是一個包含二進制數據的 JavaScript ArrayBuffer
blob response 是一個包含二進制數據的 Blob 對象 。
document response 是一個 HTML DocumentXML XMLDocument ,這取決于接收到的數據的 MIME 類型。使用 XHR 獲取 HTML 請參閱 HTML in XMLHttpRequest
json response 是一個 JavaScript 對象。這個對象是通過將接收到的數據類型視為 JSON 解析得到的。
text response 是包含在 DOMString 對象中的文本。
moz-chunked-arraybuffer arraybuffer 相似,但是數據會被接收到一個流中。使用此響應類型時,響應中的值僅在 progress 事件的處理程序中可用,并且只包含上一次響應 progress 事件以后收到的數據,而不是自請求發送以來收到的所有數據。在 progress 事件處理時訪問 response 將返回到目前為止收到的數據。在 progress 事件處理程序之外訪問, response 的值會始終為 null
ms-stream response 是下載流的一部分;此響應類型僅允許下載請求,僅 IE 支持。

responseText

默認值為空字符串 ""

只有當 responseTypetext""時,xhr 對象上才有此屬性,此時才能調用 xhr.responseText ,否則拋錯。

只有當請求成功時,才能拿到正確值。以下 2 種情況下值都為空字符串 "":請求未完成、請求失敗。

responseXML

默認值為 null

只有當 responseTypetext""document時,xhr 對象上才有此屬性,此時才能調用 xhr.responseXML,否則拋錯。

只有當請求成功且返回數據被正確解析時,才能拿到正確值。以下 3 種情況下值都為 null :請求未完成、請求失敗、請求成功但返回數據無法被正確解析時。

upload

是一個XMLHttpRequestUpload對象,用于收集傳輸信息。支持事件:

onloadstart

onprogress

onabort

ontimeout

onerror

onload

onloadend
具體觸發順序及條件,參考事件章節。
其中,xhr.upload.onprogress在上傳階段(即xhr.send()之后,xhr.readystate=2之前)觸發,每 50ms 觸發一次。可獲得上傳信息、進度等。
上述事件回調的參數為 XMLHttpRequestEventTarget 對象,詳見 事件補充。

timeout

單位毫秒,默認值 0 ,即不設置超時。

計時從onloadstart 事件觸發開始(即xhr.send()開始),以onloadend 事件觸發為結束。

在 IE 中,只能在調用open()方法后send()方法前設置。其他瀏覽器無此限制,但仍然從xhr.send()方法調用計時。

不能為同步請求設置 timeout ,否則會報錯。

早期較多瀏覽器不支持,可通過 setTImeOut 實現。

withCredentials
boolean 類型,默認值 false, 用于跨域請求時將 cookie 加入到 request header

xhr.withCredentialsCORS 什么關系
我們都知道,在發同域請求時,瀏覽器會將 cookie 自動加在 request header 中。但在發送跨域請求時, cookie 并不會自動加在 request header 中。
造成這個問題的原因:在 CORS 標準有如下規定,默認情況下,瀏覽器在發送跨域請求時,不能發送任何認證信息(credentials)如 cookiesHTTP authentication schemes 。除非 xhr.withCredentialstrue
cookies 也是一種認證信息,在跨域請求中, client 端必須手動設置 xhr.withCredentials=true ,且 server 端也必須允許 request 能攜帶認證信息(即 response header 中包含 Access-Control-Allow-Credentials:true),這樣瀏覽器才會自動將 cookie 加在 request header 中。
注意,一旦跨域 request 能夠攜帶認證信息, server 端一定不能將 Access-Control-Allow-Origin 設置為*,而必須設置為請求頁面的域名。

xhr 的事件回調

xhr 共有 8 個事件,分別如下:

onloadstart

onprogress

onabort

ontimeout

onerror

onload

onloadend

onreadystatechange

事件觸發條件
引用自 你真的會使用 XMLHttpRequest 嗎?
事件 觸發條件
onreadystatechange 每當xhr.readyState改變時觸發;但xhr.readyState由非 0 值變為 0 時不觸發。
onloadstart 調用xhr.send()方法后立即觸發,若xhr.send()未被調用則不會觸發此事件。
onprogress xhr.upload.onprogress在上傳階段(即xhr.send()之后,xhr.readystate=2之前)觸發,每 50ms 觸發一次;xhr.onprogress在下載階段(即xhr.readystate=3時)觸發,每 50ms 觸發一次。
onload 當請求成功完成時觸發,此時xhr.readystate=4
onloadend 當請求結束(包括請求成功和請求失敗)時觸發
onabort 當調用xhr.abort()后觸發
ontimeout xhr.timeout不等于 0 ,由請求開始即 onloadstart 開始算起,當到達xhr.timeout 所設置時間請求還未結束即 onloadend ,則觸發此事件。
onerror 在請求過程中,若發生 Network error 則會觸發此事件(若發生 Network error 時,上傳還沒有結束,則會先觸發 xhr.upload.onerror,再觸發 xhr.onerror ;若發生 Network error 時,上傳已經結束,則只會觸發xhr.onerror )。注意,只有發生了網絡層級別的異常才會觸發此事件,對于應用層級別的異常,如響應返回的xhr.statusCode4xx 時,并不屬于 Network error ,所以不會觸發 onerror 事件,而是會觸發 onload 事件。
請求正常時,事件觸發順序

觸發 xhr.onreadystatechange (之后每次 readyState 變化時,都會觸發一次)

觸發 xhr.onloadstart //上傳階段開始:

觸發 xhr.upload.onloadstart

觸發 xhr.upload.onprogress

觸發 xhr.upload.onload

觸發 xhr.upload.onloadend //上傳結束,下載階段開始:

觸發 xhr.onprogress

觸發 xhr.onload

觸發 xhr.onloadend

發生 abort / timeout / error 時事件觸發順序

觸發 xhr.onreadystatechange 事件,此時 readystate4

如果上傳階段還沒有結束,則依次觸發以下事件:

xhr.upload.onprogress

xhr.upload.[onabort或ontimeout或onerror]

xhr.upload.onloadend

觸發 xhr.onprogress 事件

觸發 xhr.[onabort或ontimeout或onerror] 事件

觸發 xhr.onloadend 事件

事件補充

xhr.upload.onprogressxhr.onprogress 的回調參數為 XMLHttpRequestEventTarget 對象。屬性如下:

lengthComputable
【只讀】,為 boolean值,表示資源是否有可計算的長度。

loaded
已接收或已上傳的字節數。

total
文件總字節數。

xhr.upload.onprogress 事件觸發于上傳階段,可用于獲取上傳進度。

xhr.onprogress 事件觸發于下載階段,可用于獲取下載進度。

后續補充計劃

fetchAPI 整理。

jQuery.ajax 的實現詳解。

axios 的實現詳解。

參考資料

DOMString、Document、FormData、Blob、File、ArrayBuffer 數據類型介紹

你真的會使用 XMLHttpRequest 嗎?

XMLHttpRequest Level 2 使用指南

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106092.html

相關文章

  • 前端跨域之原因&amp;&amp;方案&amp;&amp;原理

    摘要:于是乎同源策略應運而生主要限制在于和無法讀取。怎么繞過同源策略首先一般來說協議和端口造成的跨域問題大部分方法是沒有辦法繞過的。二級域名是寄存在主域名之下的域名。當主域名受到懲罰二級域名也會連帶懲罰。 前言 這是一道前端跨不過躲不掉面試必備的知識,掙扎多年沒能做到刻骨銘心深入脊髓,只能好好寫篇博文記錄起來了; 什么是跨域? 廣義來說,A域執行的文檔腳本試圖去請求B域下的資源是不被允許的,...

    Zack 評論0 收藏0
  • 微信小程序云開發項目實戰進階 - 詩詞大全&amp;成語接龍

    摘要:此時,就需要通過云函數更新數據庫,新建云函數編輯更新數據根據更新已打開人數使用云函數更新某數據的打開人數數據庫模糊查詢小程序云開發可以使用正則表達式進行模糊查詢。 1. 小程序功能 古詩詞大全 成語大全 成語接龍 詩詞飛花令 詩詞分享、收藏 詩詞接龍 唐詩宋詞起名字 百家姓 猜謎語 2. 小程序地址 https://github.com/caochangkui/miniprogra...

    Ku_Andrew 評論0 收藏0
  • 溫故js系列(12)-ajax&amp;&amp;優缺點&amp;&amp;node后端

    摘要:接收響應當請求發送到服務器端,收到響應后,響應的數據會自動填充對象的屬性。一般而已狀態代碼為作為成功的標志。必要時,可以將查詢字符串參數追加到的末尾,以便提交給服務器。后端實現可以自學一點后端知識,便于學習。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:Ajax JavaScript-Ajax&&no...

    LiangJ 評論0 收藏0
  • 詳解Vue3 Composition API優雅封裝第三方組件

      我們時常會想在保持第三方組件原有功能(屬性props、事件events、插槽slots、方法methods)的基礎上,這些功能如何優化的實現?  以Element Plus的el-input為例:  在封裝一個MyInput組件,把要使用的屬性props、事件events和插槽slots、方法methods先要依照自己的需求來編寫:  //MyInput.vue   <template&...

    3403771864 評論0 收藏0
  • 基于 HTTP 請求攔截,快速解決跨域和代理 Mock

    摘要:今天這篇文章,我們會介紹幾種常見的方法和其中存在的問題,并提出如何基于請求攔截,快速解決跨域和代理問題的方案。因為沒有修改該請求,只是延遲發送,這樣就保持了原請求與業務服務器之間的所有鑒權等相關信息,由此解決了跨域訪問無法攜帶的問題。 近幾年,隨著 Web 開發逐漸成熟,前后端分離的架構設計越來越被眾多開發者認可,使得前端和后端可以專注各自的職能,降低溝通成本,提高開發效率。 在前后端...

    dreamGong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<