Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Fetch HTML

Fetch HTML

Fetch API предоставляет более гибкое и лучшее решение для отправки http запросов к серверу нежели чем всем знакомый XMLHttpRequest. В чем же преимущество?

А в том что Fetch api в своей структуре использует promise(обещания), которые позволяют использовать более чистый и простой API.

Для работы с данным api используется метод fetch(). Он может принимать в себя два аргумента:

- путь по которому будет совершен запрос

- Дополнительные опции запроса

Допустим мы хотим получить содержимое файла entry.json который находится на сервере:

fetch('/js/entry.json').then(function(response) {
        if(response.status === 200){
            return response.text();
        }else{
            console.log('Подключения к сети нет ');
        }
    }).then(function(result) {
        console.log(result);
    });

C помощью данного кода мы получим содержимое файла entry.json в текстовом формате. В качестве аргумента метода fetch мы указываем путь до файла который хотим прочитать и дальше на выходе получаем объект promise. Напомню что объект promise это объект который содержит свое состояние.(fulfilled - выполнено, rejected - выполнено с ошибкой).

Дальше работая с объектом promise мы с помощью обработчика then получаем его ответ response и проверяем статус.

Если статус равняется 200(response.status === 200) , то мы приводим ответ к текстовому виду с помощью метода text() и возвращаем его. В другом случае у нас произойдет ошибка и вывод сообщения в консоль. Причиной может быть неправильно указанный путь.

Если все прошло успешно! Мы по цепочке с помощью обработчика then обрабатываем возвращаемый результат в текстовом формате и выводим его в консоль.

По сути с помощью первого обработчика then мы получаем ответ и анализируем его(проверяем статус, заголовки), приводим тело к желаемому формату.

А второго выводим результат (ответ от сервера).

Немного запутано не правда ли? Но если присмотреться и немного поразбираться, то здесь ничего сложного нет!

C XMLHttpRequest это выглядело бы так:

var  req = new XMLHttpRequest();
    req.open("GET", "/js/entry.json", false);
    req.send(null);
    if (req.status === 200) {
      console.log( req.responseText);
    }
    else{
        console.log('Подключения к сети нет ');
    }

Что касается текстового формата к которому мы привели содержимое файла entry.json. Это мягко говоря не очень разумный подход.

Здесь будет уместен формат json поэтому функцию text() мы смело можем заменять на json().

response.json();

В результате нам в консоль будет выводится уже не строка, а объект.

В fecth поддерживаются следующие функции для приведения возвращаемых данных к определенному типу: text(), json(), blob(),arrayBuffer(), formData()

Скажу только что функция blob() возвращает объект с информацией о возвращаемых данных и ответе от сервера.

Теперь рассмотрим параметры которые вы можете передавать в качестве второго аргумента метода fetch.

method - GET, POST, PUT, DELETE, HEAD (по умолчанию используется GET)

headers - (Content-Type: text/html; charset=utf-8) заголовки запроса передаются в виде объекта

referrer - адрес с которого осуществляется запрос

mode - указывает режим запроса кросс-доменности (same-origin, no-cors, cors)

credentials - пересылка кук вместе с запросом (omit, same-origin, include)

cache- кеширование запроса(default, no-store, reload, no-cache, force-cache, only-if-cached)

redirect - редирект (follow, error)

Давайте авторизуемся используя полученные знания:

fetch('/function/index.php', {
        method: 'post',
        body: JSON.stringify(
            {
                login:'andrey',
                password:'dh7dhhd27dh',
                cache:'7fc4y7fby4c378cfy4bc4g8y4f'
            }
            ),
        headers: new Headers({
				'Content-Type': 'application/x-www-form-urlencoded'
			}),
        credentials:'include',
        referrer:'http://site1.com/login'
			}).then(function(response){
				return response.blob();
			}).then(function(res){
				console.log(res);
});

Как видите, здесь мы через api fetch выполнили post запрос на обработчик.

При формировании запроса мы указали определенные параметры:

- метод отправки post

- post параметры

- заголовок отправки формы через ajax

- возвращение сохраненных кук или сессий (credentials:'include') при успешной авторизации

- адрес с которого был выполнен запрос

Заметьте что для формирования заголовков мы воспользовались объектом Headers, это было сделано для удобства.

В результате данных действий мы успешно авторизовались используя fetch api. Я уверен вы оценили удобство использования данной технологии.

А на этом данная статья подошла к концу. Я желаю вам успехов и удачи! Пока!

Оцените статью:

Статьи

Комментарии

Внимание!!! Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm