如何向 javascript 的 fetch() 函数发送附加数据
Posted
技术标签:
【中文标题】如何向 javascript 的 fetch() 函数发送附加数据【英文标题】:How do I sent additional data to javascript's fetch() function 【发布时间】:2017-07-08 21:14:03 【问题描述】:我想使用fetch()
来查询为我的搜索页面提供支持的 API 端点。它返回 JSON 格式的搜索结果列表。
我还想将用户提交的当前查询传递给 API。旧实现使用 jquery 和 getJSON。查看 getJSON 的文档,它说我可以传入 data
变量:
Looking at the docs 用于获取,我不确定如何在请求中传递数据。所以我的问题是,我如何传递一个将与我的请求一起发送到服务器的字符串?
编辑:我想我可以将查询附加到请求 URL,例如“/search/?q=Something”并发送。有没有人有更好的方法?
【问题讨论】:
是不是 fetch 只是构建来获取固定信息?在文档中,我找不到任何可以使用 fetch 发送参数的内容。有 getpost getJSON ajax 和更多参数 如果您不希望数据出现在请求中怎么办 - 只希望在响应结果时让变量存在? 【参考方案1】:如果您查看有关 fetch 的文档的 Body section,它列出了几种类型的值,您可以使用它们来指定在请求中发送的数据。
使用FormData
的示例:
var fd = new FormData();
fd.append('q', 'Something');
fetch('/search',
method : "POST",
body : fd
)
.then(...)
请注意,您不能在 GET 或 HEAD 请求上使用 body
选项(您的情况似乎可能正在这样做)。在这种情况下,您可以使用URLSearchParams
构建参数:
var params = new URLSearchParams();
params.append('q', 'Something');
fetch('/search/?' + params.toString(),
method: 'GET'
)
.then(...);
【讨论】:
普通javascript
对象似乎未在 body
github.com/w3c/web-platform-tests/blob/master/fetch/api/request/…、github.com/w3c/web-platform-tests/blob/master/fetch/api/basic/… 测试或预期
@guest271314 如果我在我的 Chrome 控制台中调用 fetch('/save', method : "POST", body : data : 5 )
,请求会以空正文和 Content-Length
0 发送。
是的,javascript
对象应该传递给JSON.stringify()
,另见***.com/questions/40939857/fetch-with-readablestream【参考方案2】:
你可以通过如下方式
fetch('/users',
method: 'POST',
headers:
'Content-Type': 'application/json'
,
body: JSON.stringify(
name: 'Hubot',
login: 'hubot',
)
)
【讨论】:
以上是关于如何向 javascript 的 fetch() 函数发送附加数据的主要内容,如果未能解决你的问题,请参考以下文章
分别使用 XHRjQuery 和 Fetch 实现 AJAX
如何从 fetch javascript 请求的响应中获取数据