XMLHttpRequest, reimplemented using fetch.
- This allows code using XHR to be tested using Node, with our friend
node-fetch
. - You can also use it inside service workers!
Due to the nature of fetch(),
- This does not support synchronous XHR.
- This does not support
progress
event. - This does not implement
XMLHttpRequest.upload
. - XMLHttpRequest instance is not reusable.
HEADERS_RECEIVED
andLOADING
ready states are skipped.
Because this is still XMLHttpRequest,
- This does not support omitting cookies for same-origin requests.
- There is no Promise support.
- There is no built-in Node.js support. Polyfill using
node-fetch
.
This does not support obsolete APIs such as:
XMLHttpRequest.onreadystatechange
- Basic authentication in
XMLHttpRequest.open
(use Authorization header!)
Due to the nature of the main usage,
XMLHttpRequest.responseXML
always throws.Document
cannot be used inXMLHttpRequest.send()
.- The default MIME type is
text/plain
. - Instead of
ProgressEvent
,CustomEvent
is used.
This shim assumes you have these ES features:
async
supportclass
syntaxglobalThis
Object.assign
Object.create
Object.entries
Promise
includingPromise.prototype.finally
Symbol
- Template literals
And these WHATWG features:
AbortController
Blob
- Constructible
DOMException
EventTarget.prototype.addEventListener
withonce
optionfetch
API withsignal
supportsetTimeout