Недавно я обнаружил, что я конвертирую функцию, которая вызывает удаленный API, от возврата обратного вызова до возврата Promise
. Я думал, что это отличная возможность также заменить вызов $.ajax
вызовом fetch
, так как fetch
уже возвращает Promise
.Использование fetch вместо ajax jQuery для вызова API GET
Однако этот конкретный вызов является GET
, который фактически ожидает полезную нагрузку (содержащую ключ и тип возврата). В частности, я называю это с помощью:
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: config.serviceUrl,
data: {
apiKey: key,
format: 'json'
}
})
.done(data => {...})
.fail((jqXHR, textStatus, errorThrown) => {...});
Однако fetch
не имеет data
свойство, и выдает сообщение об ошибке, если вы пытаетесь отправить body
с GET
запроса (TypeError: Failed to execute 'fetch': Request with GET/HEAD method cannot have body
). И согласно Chromium forums, это ожидаемое поведение.
Имейте в виду: у меня нет абсолютно никакого контроля над внешним API, поэтому упоминание о том, что отправка полезной нагрузки с GET
нарушает какой-либо протокол API или предлагает изменить основной вызов, не помогает.
В этом случае можно использовать fetch
? Как?
Вы можете использовать 'body' свойство fetch запрос на добавление данных, таких как объект FormData. Также обратите внимание, что 'Fetch' является очень экспериментальным на этом этапе и не очень хорошо поддерживается. Я лично буду придерживаться AJAX. Было бы также полезно, если бы вы показали нам фактический запрос «Fetch», который вы написали –