Въведение за извличане

Довиждане, XMLHttpRequest!

донесе () ви позволява да прави искания, подобни на XMLHttpRequest (XHR). Основната разлика е, че Изважда API използва обещания (Promise). което позволява използването на по-опростен и изчистен API, като се избягва катастрофално броя на обратни повиквания, както и необходимостта да се помни, приложния програмен интерфейс XMLHttpRequest.






Изважда API достъпен за потребители със Service работник в глобален обхват в Chrome 40, но във версията на 42 тя стане достъпна в прозореца Обхват. Разбира се, за всички останали браузъри, които все още не съществуват, не подкрепят донесе Полифем от GitHub. която е на разположение днес.

Обикновено Заявката за изтегляне

Да започнем с едно сравнение на един прост пример, реализиран с XMLHttpRequest и донесе. Всичко, което правим в този пример - да отправи искане към URL адреса, както и разбор на отговора, че сме разбрали като JSON.

XMLHttpRequest

Пример с XMLHttpRequest ще изисква от нас да зададете два обработват събитие за успеха и грешката. както и причина два метода: отворени () и изпращане (). Един пример на документацията MDN:

Нашата Заявката за изтегляне ще изглежда така:

Първото нещо, което да проверите състоянието на отговора и да се провери дали успешно извърши заявка (200 очаквате статус). Ако всичко е наред, а след това направи разбор на отговора като JSON.

извличане () е обект на живо-отговор. Това означава, че в резултат на повикване метод JSON (), получаваме обещанието, тъй като четене от подобен обект е асинхронен.

отговор на метаданни

В предишния пример, ние сме се научили как да проверите състоянието на обекта на отговор и konventirovat собствен отговор в JSON. Останалата част от метаданни, който можете да достигнете (например, заглавия), са изброени по-долу:

видове Отговор

Когато донесе заявка тип отговор на «основно» ще бъде даден, «кора» или «непрозрачен». Тези "типове" сочат, с това, което дойде данни на ресурса и може да се използва, за да определи за обработка на данни.

Когато е отправено искане до ресурс, разположен на един и същ произход (което означава, че искането се извършва в рамките на едно място. Прибл. Per.) Отговор ще съдържа тип "база" и такова искане няма да има каквито и да било ограничения.

Ако искането е направено от един към друг origin'a (искане кръст място), които, от своя страна, се върна Cors заглавията, докато тип ще бъде «кора». Обекти на видовете «кора» и «основно» почти идентични, но «кора» донякъде ограничава метаданните, които могат да бъдат достъпни за «Cache-Control", "Content-Language", "Content-Type", "Изтича», «Last-Modified» и «Pragma».







Що се отнася до «непрозрачен» - той идва в случаите, когато искане за CORS, но отдалечен ресурс не се връща Cors заглавки. Този тип заявка не предоставя достъп до данни или статут на заглавието, така че не може да се съди по резултатите от търсенето. В рамките на текущото изпълнение на донеса () не е възможно да се извърши Cors искания от прозореца на обхвата, и затова е писано тук. Тази функционалност трябва да се добави, веднага след като API на кеша ще бъде достъпен от прозореца.

Можете да зададете режим очаква искане, като по този начин за филтриране на резултатите от заявка с грешен тип. Режим на заявката може да се настрои за следното:

- "един и същи произход" успява само за заявки към един и същ произход, всички останали искания, ще бъдат отхвърлени.
- "кора" работи по същия начин, както и «от един и същи произход» + добавя възможността за създаване на заявки към сайтове на трети страни, ако се върнат на съответните Cors заглавията.
- "кора-с-принуден-финален преглед" работи по същия начин като «кора», но преди искането е винаги изпрати заявка за сонда за преглед.
- "не-кора" се използва, когато искате да задава въпроси за произхода, който не изпрати заглавията кора, както и в резултат на изпълнение е обект от тип «непрозрачен». Както бе споменато по-горе, в момента това не е възможно в прозореца Обхват.

За да определите режим заявка, добавете опции обект на втори параметър на заявката и да «режим» в този обект:

обещания вериги

Един от най-хубавите черти е възможността да Promise'ov ги групирате в вериги. Ако говорим за тях в обхвата донесе (). те ни позволяват да "несполучлив" логика между заявките.

Ако работите с JSON API, ще трябва да проверите състоянието и разбор JSON за всеки отговор. Можете да опрости вашия код чрез идентифициране на състоянието и JSON разбор като отделни функции, които връщат Promise'y. Вие ще трябва да мисля само за обработката на самите данни и, разбира се, изключения.

Ще дефинираме функция, която проверява response.status и връща резултата: Promise.resolve () или Promise.reject (). Това е първият метод, наречен в нашата верига, а ако успее (Promise.resolve ()), а след това го нарече следващия метод - донесе (). което, от своя страна, отново се връща обещанието на response.json (). След този разговор, ако е успешно, ние ще бъдем готови JSON обект. Ако разбор провали, Promise ще бъде анулирана и състоянието на работа на изключението.

заявка POST

Той отдавна е изненадващо, е необходимо да използвате метода POST за прехвърляне на параметри в "тялото" на искането да се работи с API.
За да се извърши такова искане, ние трябва да посочите съответните опции в настройките обектно донесе ():

Подаване на пълномощията поискат чрез Fetch-

Ако искате да се изпрати искане до всички идентификационни данни за (например, бисквитка), трябва да зададете `credentials` в опции по заявка« включват »:

Мога ли да отмените донесе () заявката?
В момента това е невъзможно, но това е в активен диалог на GitHub

Има ли Полифем?
да

Защо «не-кора» приложени за сервизни работници, но не и за прозореца?
Това беше направено от съображения за сигурност. Повече подробности можете да намерите тук.