2017-02-19 14 views
0

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

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

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

Looking at the docs для выборки, я не знаю, как передать данные как часть моего запроса. Поэтому мой вопрос: как передать строку, которая будет отправлена ​​на сервер вместе с моим запросом?

EDIT: Я думаю, что я могу добавить запрос к URL-адресу запроса, например «/ search /? Q = Something» и отправить его. Кто-нибудь имеет лучший способ?

+0

не только строить выборки для извлечения фиксированной информации? в документах я не могу найти ничего для отправки параметров с помощью fetch. есть сообщение getJSON ajax и многое другое с параметрами – mtizziani

ответ

3

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

Пример использования 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(...); 
+0

Обычный объект 'javascript', похоже, не тестируется или не ожидается на' body' https://github.com/w3c/web-platform-tests/blob/master/fetch /api/request/request-idl.html, https://github.com/w3c/web-platform-tests/blob/master/fetch/api/basic/request-upload.js – guest271314

+1

@ guest271314 Если я вызываю 'fetch ('/ save', { метод: «POST», тело: {данные: 5} }) 'в моей консоли Chrome запрос отправляется с пустым телом и' Content-Length' 0. – JLRishe

+0

Да, Объект 'javascript' должен быть передан' JSON.stringify() ', см. также http://stackoverflow.com/questions/40939857/fetch-with-readablestream – guest271314

0

Вы можете передать ниже

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