Как отправить дополнительные данные в функцию fetch() javascript?

Я хочу использовать fetch() для запроса конечной точки API, которая обеспечивает работу моей страницы поиска. Он возвращает список результатов поиска в формате JSON.

Я также хочу передать в API текущий запрос, отправленный пользователем. В старой реализации использовались jquery и getJSON. Глядя на документы для getJSON, я могу передать переменную data:

data
Type: PlainObject or String
A plain object or string that is sent to the server with the request.

Глядя на документы для выборки, я не уверен, как передать данные как часть моего запроса. Итак, мой вопрос: как мне передать строку, которая будет отправлена ​​​​на сервер вместе с моим запросом?

РЕДАКТИРОВАТЬ: я думаю, что могу добавить запрос к URL-адресу запроса, например «/search/?q=Something», и отправить его. У кого-нибудь есть лучший способ?


person a53-416    schedule 19.02.2017    source источник
comment
Разве сборка не предназначена только для получения фиксированной информации? в документах я не могу найти ничего для отправки параметров с помощью выборки. есть get post getJSON ajax и многое другое с параметрами   -  person mtizziani    schedule 19.02.2017
comment
Что делать, если вы не хотите, чтобы данные были в запросе — просто если вы хотите, чтобы переменная существовала при ответе на результат?   -  person rjurney    schedule 28.05.2020


Ответы (2)


Если вы посмотрите на раздел Body документации по выборке, в нем перечислены несколько типов значений, которые вы можете использовать для указания данных, отправляемых в вашем запросе.

Пример использования FormData:

var fd = new FormData();
fd.append('q', 'Something');

fetch('/search', {
  method : "POST",
  body : fd
})
.then(...)

Обратите внимание, что вы не можете использовать параметр body в запросах GET или HEAD (что, похоже, вы можете делать в своем случае). В этой ситуации вы можете создать параметры, используя URLSearchParams:

var params = new URLSearchParams();
params.append('q', 'Something');

fetch('/search/?' + params.toString(), {
    method: 'GET'
})
.then(...);
person JLRishe    schedule 19.02.2017
comment
Обычный объект javascript не тестировался или не ожидался на body github.com/w3c/web-platform-tests/blob/master/fetch/api/request/, github.com/w3c/web-platform-tests/blob/master/fetch/api/basic/ - person guest271314; 19.02.2017
comment
@guest271314 guest271314 Если я вызову fetch('/save', { method : "POST", body : { data : 5 } }) в консоли Chrome, запрос будет отправлен с пустым телом и Content-Length 0. - person JLRishe; 19.02.2017
comment
Да, объект javascript должен быть передан в JSON.stringify(), см. также stackoverflow.com/questions/40939857 /fetch-with-readablestream - person guest271314; 19.02.2017

Вы можете пройти, как показано ниже

 fetch('/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Hubot',
    login: 'hubot',
  })
})
person Jagajit Prusty    schedule 19.02.2017