XMLHttpRequest events - garevna/js-course GitHub Wiki
AJAX
:mortar_board: XMLHttpRequest
Последовательность действийЭкземпляр XMLHttpRequestМетод open()Метод send()Свойство readyStateСвойство statusСвойство responseText
:mortar_board: Обработка событий
Значения свойств, начинающиеся на on, могут быть ссылкой на колбэк-функцию, которая будет вызвана в момент возникновения события
Тип обрабатываемого события - текст, следующий за on в имени свойства
:mortar_board: onreadystatechange
Свойство, значение которого является ссылкой на колбэк-функцию, которая будет обрабатывать событие изменения значения readyState
Назначить обработчика:
var transport = new XMLHttpRequest ()
transport.onreadystatechange = function ( event ) {
if ( this.readyState === 4 &&
this.status === 200 )
console.log ( event )
}
При вызове колбэк-функции ей будет передан объект события:
▼ Event {isTrusted: true, type: "readystatechange", target: XMLHttpRequest, currentTarget: XMLHttpRequest, eventPhase: 2, …}
bubbles: false
cancelBubble: false
cancelable: false
composed: false
► currentTarget: XMLHttpRequest { onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, … }
defaultPrevented: false
eventPhase: 0
isTrusted: true
► path: []
returnValue: true
► srcElement: XMLHttpRequest { onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, … }
► target: XMLHttpRequest { onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, … }
timeStamp: 87810968.4
type: "readystatechange"
► __proto__: Event
:coffee: Пример в песочнице |
:link: HTTP Status Messages |
|---|
ProgressEvent
Остальные события ( loadstart, loadend, progress, load, error, timeout ) отличаются от события readystatechange - они относятся к категории ProgressEvent:
▼ ƒ ProgressEvent()
arguments: null
caller: null
length: 1
name: "ProgressEvent"
► prototype: ProgressEvent {constructor: ƒ, Symbol(Symbol.toStringTag): "ProgressEvent"}
► __proto__: ƒ Event()
:mortar_board: onload
Это свойство содержит ссылку колбэк-функцию, которая будет обрабатывать событие благополучного завершения загрузки данных с сервера
var request = new XMLHttpRequest
request.open (
"get",
'https://www.random.org/integers/?num=10&min=0&max=255&col=1&base=16&format=plain&rnd=new'
)
request.onload = function() {
if ( this.status === 200 ) {
console.log ( this.response )
}
}
request.send ()
:mortar_board: onloadstart | onprogress | onloadend
var request = new XMLHttpRequest()
request.open (
"get",
'https://httpbin.org/get',
true
)
request.responseType = "arraybuffer";
request.onloadstart = function( event ) {
console.log ( 'START' )
}
request.onloadend = function( event ) {
console.log ( 'END' )
}
request.onprogress = function( event ) {
console.log ( `progress: ${event.loaded} / ${event.total}` )
}
request.onload = function( event ) {
console.log ( this.response )
}
request.send ()
:mortar_board: ontimeout
Это свойство содержит ссылку колбэк-функцию, которая будет вызвана, когда истечет установленный временной интервал
Временной интервал устанавливается путем определения значения свойства timeout
var request = new XMLHttpRequest()
request.open (
"POST",
'https://httpbin.org/post'
)
request.setRequestHeader (
"Content-Type",
"application/x-www-form-urlencoded"
)
request.timeout = 100
request.ontimeout = function( event ) {
console.log ( event )
}
:mortar_board: onerror
Это свойство содержит ссылку колбэк-функцию, которая будет обрабатывать ошибки, возникающие при загрузке данных с сервера
var transport = new XMLHttpRequest ()
transport.onerror = function ( err ) {
console.log ( this.responseText )
}
:coffee: Пример в песочнице |
:coffee: Пример в песочнице |
|---|
| :briefcase: Упражнения | :link: Протокол TCP |
:link: RFC793 |
|---|