Skip to content

Commit b7ab07c

Browse files
Apply suggestions from code review
Co-authored-by: SuperMaxusa <[email protected]>
1 parent 1c0b64e commit b7ab07c

File tree

1 file changed

+38
-38
lines changed

1 file changed

+38
-38
lines changed

5-network/01-fetch/article.md

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

22
# Fetch
33

4-
JavaScript може відправляти мережові запити на сервер та підвантажувати нову інформацію по мірі необхідності.
4+
JavaScript може відправляти мережеві запити на сервер та підвантажувати нову інформацію за потребою.
55

6-
Наприклад, можна використовувати мережовий запит, щоб:
6+
Наприклад, можна використовувати мережевий запит, щоб:
77

88
- Відправляти замовлення,
99
- Завантажити інформацію про користувача,
@@ -12,11 +12,11 @@ JavaScript може відправляти мережові запити на с
1212

1313
...І все це без перезавантаження сторінки!
1414

15-
Є загальний термін "AJAX" (абревіатура від <b>A</b>synchronous <b>J</b>avaScript <b>A</b>nd <b>X</b>ML) для мережевих запитів від JavaScript. Але не обов’язково використовувати XML: цей термін старий, тому це слово тут. Можливо, ви вже чули цей термін.
15+
Є загальний термін "AJAX" (абревіатура від <b>A</b>synchronous <b>J</b>avaScript <b>A</b>nd <b>X</b>ML) для мережевих запитів від JavaScript коду. Але формат XML використовувати не обов’язково: цей термін застарілий, тому це слово (XML) тут. Можливо, ви вже його десь чули.
1616

1717
Є кілька способів надіслати мережевий запит і отримати інформацію з сервера.
1818

19-
Метод `fetch()` - сучасний та дуже потужний, через то буде почато з него. Він не підтримуєся старими (можна використовувати поліфіл), але підтримуєся всіма сучасними браузерами.
19+
Метод `fetch()` -- сучасний та дуже потужний, тому почнемо з нього. Він не підтримується старими (можна використовувати поліфіл), але підтримується всіма сучасними браузерами.
2020

2121
Базовий синтаксис:
2222

@@ -27,21 +27,21 @@ let promise = fetch(url, [options])
2727
- **`url`** -- URL для відправлення запиту.
2828
- **`options`** -- додаткові параметри: метод, заголовки і т.д.
2929

30-
Без `options`, це просто GET запит, котрий скачує вміс за адресою `url`.
30+
Без `options`, це просто GET запит, який завантажує зміст за адресою `url`.
3131

32-
Браузер зразу починає запит та повертає проміс, котрий зовнішний код використовує для отримання результатів.
32+
Браузер одразу починає робити запит та повертає проміс, який зовнішний код використовує для отримання результату.
3333

34-
Процес отримання запиту зазвичай відбуваєся у два етапи.
34+
Процес отримання запиту зазвичай відбувається у два етапи.
3535

36-
**По перше, `promise` виконуєся із об'єктом вбудованого класу [Response](https://fetch.spec.whatwg.org/#response-class) у якості результу, зразу коли сервер надішле заголовки відповіді.**
36+
**По-перше, `promise` завершиться із об'єктом вбудованого класу [Response](https://fetch.spec.whatwg.org/#response-class) у якості результату, одразу коли сервер надішле заголовки відповіді.**
3737

3838
На цьому етапі можна перевірити статус HTTP-запиту, та визначити, чи виконався він успішно, а також переглянути заголовки, але покищо без тіла запиту.
3939

40-
Проміс закінчуєся помилкою, якщо `fetch` не зміг виконати HTTP-запит, e.g. наприклад, під час помилки мережі або якщо такий сайт відсутний. HTTP-статуси 404 та 500 це не помилка.
40+
Проміс закінчується помилкою, якщо `fetch` не зміг виконати HTTP-запит, наприклад, через помилку мережі або, якщо такого сайту не існує. Ненормальні HTTP-статуси, як 404 та 500, не викликатимуть помилку.
4141

42-
Можна побачити власний HTTP-статус у власних запитах:
42+
Ми можемо побачити HTTP-статус у властивостях відповіді:
4343

44-
- **`status`** -- код статуса HTTP-запиту , наприклад, 200.
44+
- **`status`** -- код статуса HTTP-запиту, наприклад, 200.
4545
- **`ok`** -- логічне значення, котре буде `true`, якщо код HTTP-статосу в діапазоні 200-299.
4646

4747
Наприклад:
@@ -50,7 +50,7 @@ let promise = fetch(url, [options])
5050
let response = await fetch(url);
5151

5252
if (response.ok) { // якщо HTTP-статус у діапазоні 200-299
53-
// отримання тіла запиту (див. про цей метод нище)
53+
// отримання тіла запиту (див. про цей метод нижче)
5454
let json = await response.json();
5555
} else {
5656
alert("HTTP-Error: " + response.status);
@@ -59,16 +59,16 @@ if (response.ok) { // якщо HTTP-статус у діапазоні 200-299
5959

6060
**По друге, для отримання тіла запиту, потрібно використовувати додатковий виклик методу.**
6161

62-
`Response`представляє декілька методів, котрі грунтуются на промісах, для доступу до тіла запиту в різних форматах:
62+
`Response` надає декілька методів, які повертають проміс, для доступу до тіла запиту в різних форматах:
6363

6464
- **`response.text()`** -- читає відповід та повертає, як звичайний текст,
6565
- **`response.json()`** -- декодує відповідь у форматі JSON,
66-
- **`response.formData()`** -- повертає відповідь, як `FormData` object (він буде розглянутий [у наптупному розділі](info:formdata)),
67-
- **`response.blob()`** -- повертає об'єкт, як[Blob](info:blob) (бінарні дані з типом),
66+
- **`response.formData()`** -- повертає відповідь, як об'єкт `FormData` (він буде розглянутий [у наступному розділі](info:formdata)),
67+
- **`response.blob()`** -- повертає відповідь, як [Blob](info:blob) (бінарні дані з типом),
6868
- **`response.arrayBuffer()`** -- повертає відповідь, як [ArrayBuffer](інформація: буфер масиву - бінарний масиви) (низькорівневе представлення двійкових даних),
69-
- крім того, `response.body` це об'єкт [ReadableStream](https://streams.spec.whatwg.org/#rs-class) ,за допомогою котрого можна отримувати (зчитувати) тіло частинами. Такий приклад буде розглянуто трохи пізніше.
69+
- крім того, `response.body` це об'єкт [ReadableStream](https://streams.spec.whatwg.org/#rs-class), за допомогою якого можна отримувати (зчитувати) тіло відповіді частинами. Такий приклад буде розглянуто трохи пізніше.
7070

71-
Наприклад, буде отримано JSON-об'єкт з останніми комітами із ропозиторію GitHub:
71+
Наприклад, буде отримано JSON-об'єкт з останніми комітами із репозиторію GitHub:
7272

7373
```js run async
7474
let url = 'https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits';
@@ -99,16 +99,16 @@ let text = await response.text(); // read response body as text
9999
alert(text.slice(0, 80) + '...');
100100
```
101101

102-
Для прикладу роботи із бінарними даними, буде зроблено запит та виведено на екран логотип [специфікації "fetch"](https://fetch.spec.whatwg.org) (див. розділ [Blob](info:blob), дізнатися про операції із `Blob`):
102+
Для прикладу роботи із бінарними даними, буде зроблено запит та виведено на екран логотип [специфікації "fetch"](https://fetch.spec.whatwg.org) (див. розділ [Blob](info:blob), щоб дізнатись детальніше про операції із `Blob`):
103103

104104
```js async run
105105
let response = await fetch('/article/fetch/logo-fetch.svg');
106106

107107
*!*
108-
let blob = await response.blob(); // скачано, як Blob об'єкт
108+
let blob = await response.blob(); // скачати, як Blob об'єкт
109109
*/!*
110110

111-
// створення <img> для ного
111+
// створення <img> для нього
112112
let img = document.createElement('img');
113113
img.style = 'position:fixed;top:10px;left:10px;width:100px';
114114
document.body.append(img);
@@ -125,19 +125,19 @@ setTimeout(() => { // приховування через три секунди
125125
````Важливо
126126
Можна вибрати тільки один метод читання відповіді.
127127
128-
Якщо, було отримано відповід із `response.text()`, тоді `response.json()` не зпрацює, бо дані вже були оброблені..
128+
Якщо, було отримано відповід із `response.text()`, тоді `response.json()` не спрацює, бо дані вже були оброблені..
129129
130130
```js
131-
let text = await response.text(); // response body consumed
132-
let parsed = await response.json(); // fails (already consumed)
131+
let text = await response.text(); // читаємо тіло відповіді
132+
let parsed = await response.json(); // завершується помилкою, бо дані вже прочитані
133133
```
134134
````
135135

136-
## Заголовки запиту
136+
## Заголовки відповіді
137137

138-
Заоголовки запиту зберігаются у схожому на Map об'єкті `response.headers`.
138+
Заоголовки відповіді зберігаются у схожому на Map об'єкті `response.headers`.
139139

140-
Це не зовсім `Map`, але можна використати такі самі методи, як із `Map`, щоб отримати заголовок за його назвою або перебрати заголовки у циклі:
140+
Це не зовсім `Map`, але можна використовувати такі самі методи, щоб отримати заголовок за його назвою або перебрати заголовки у циклі:
141141

142142
```js run async
143143
let response = await fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits');
@@ -153,7 +153,7 @@ for (let [key, value] of response.headers) {
153153

154154
## Заголовки запиту
155155

156-
Для встановлення заголовка запиту в `fetch`, можна використати опцію `headers` option. Вона містит об'єкт з вихідними заголовками, наприклад:
156+
Для встановлення заголовка запиту в `fetch`, можна використати властивість `headers` в об'єкті `options`. Вона містит об'єкт з вихідними заголовками, наприклад:
157157

158158
```js
159159
let response = fetch(protectedUrl, {
@@ -163,7 +163,7 @@ let response = fetch(protectedUrl, {
163163
});
164164
```
165165

166-
...Є список [заборонені заголовки HTTP](https://fetch.spec.whatwg.org/#forbidden-header-name), котрі не можна встановити:
166+
...Але існує список [заборонених HTTP заголовків](https://fetch.spec.whatwg.org/#forbidden-header-name), які не можна встановити:
167167

168168
- `Accept-Charset`, `Accept-Encoding`
169169
- `Access-Control-Request-Headers`
@@ -186,14 +186,14 @@ let response = fetch(protectedUrl, {
186186
- `Proxy-*`
187187
- `Sec-*`
188188

189-
Ці заголовки забезпечуют достовірність HTTP, через то вони контролюются тільки браузером.
189+
Ці заголовки забезпечуют достовірність HTTP, через це вони контролюются і встановлюються лише браузером.
190190

191191
## POST запити
192192

193193
Для відправлення `POST` запиту або запиту з іншим методом, треба використати `fetch` параметри:
194194

195195
- **`method`** -- HTTP-метод, наприклад `POST`,
196-
- **`body`** -- тіло запиту, одне із списку:
196+
- **`body`** -- тіло запиту, щось одне із списку:
197197
- рядок (наприклад, у форматі JSON),
198198
- об'єкт `FormData`, для відправки даних як `multipart/form-data`,
199199
- `Blob`/`BufferSource` для відправлення бінарних даних,
@@ -223,9 +223,9 @@ let result = await response.json();
223223
alert(result.message);
224224
```
225225

226-
Зауваження, що оскільки тіло запиту `body` - це рядок, то заголовок `Content-Type` по замовчуванню буде `text/plain;charset=UTF-8` .
226+
Зверніть увагу, якщо тіло запиту `body` -- рядок, то заголовок `Content-Type` типово буде `text/plain;charset=UTF-8` .
227227

228-
Але, оскільки надіслано JSON, то використано парамет `headers` для відправлення замість цього `application/json`, правильний `Content-Type` для JSON формату.
228+
Але, оскільки ми надсилаємо дані у форматі JSON, то через `headers` ми маємо встановити значення `application/json` -- правильний `Content-Type` для JSON формату.
229229

230230
## Відправлення зображення
231231

@@ -262,7 +262,7 @@ alert(result.message);
262262
</body>
263263
```
264264

265-
Зауваження, тут не потрібно вручну встановлювати заголовок `Content-Type`, бо об'єкт `Blob` вбудований тип (тут `image/png`, котрий заданий у `toBlob`). Під час відправлення об'єктів `Blob`, він автоматично стає значенням `Content-Type`.
265+
Зауваження, тут не потрібно вручну встановлювати заголовок `Content-Type`, бо об'єкт `Blob` вбудований тип (буде використано `image/png`, заданий через `toBlob`). Під час відправлення об'єктів `Blob`, він автоматично стає значенням `Content-Type`.
266266

267267
Функція `submit()` може бути переписана без `async/await`, наприклад наступним чином:
268268

@@ -279,9 +279,9 @@ function submit() {
279279
}
280280
```
281281

282-
## Підсумок
282+
## Підсумки
283283

284-
Типовий запит за домогою `fetch` складаєся із двох операторів `await`:
284+
Типовий запит за допомогою `fetch` складаєся із двох операторів `await`:
285285

286286
```js
287287
let response = await fetch(url, options); // завершення із заголовками відповіді
@@ -297,7 +297,7 @@ fetch(url, options)
297297
```
298298

299299
Параметри відповіді:
300-
- `response.status` -- HTTP код відповід,
300+
- `response.status` -- HTTP-статус відповіді,
301301
- `response.ok` -- `true`, якщо статус відповіді у діапазоні 200-299.
302302
- `response.headers` -- схожий на `Map`об'єкт із HTTP заголовками.
303303

@@ -308,9 +308,9 @@ fetch(url, options)
308308
- **`response.blob()`** -- повертає об'єкт як [Blob](info:blob) (бінарні дані з типом),
309309
- **`response.arrayBuffer()`** -- повертає відповідь як [ArrayBuffer](info:arraybuffer-binary-arrays) (низько рівневі бінарні дані),
310310

311-
Опції `fetch`, котрі на даний момент вивчено:
311+
Опції `fetch`, які ми розглянули:
312312
- `method` -- HTTP-метод,
313-
- `headers` -- об'єкт із запитуваними заголовками (не всі заголовки дозволені),
313+
- `headers` -- об'єкт із заголовками запиту (не всі заголовки дозволені),
314314
- `body` -- дані для відправлення (тіло запиту) у вигляді тексту `string`, `FormData`, `BufferSource`, `Blob` або `UrlSearchParams` об'єкт.
315315

316316
У наступних розділах буде розглянуто більше параметрів та варіантів використання `fetch`.

0 commit comments

Comments
 (0)