我无法将params传递给ajax get请求。
我们假设我必须将参数{category: 'cat', type: 'type', searchKey: 'key' }
传递给网址/search
,我的代码如下:
action$.ofType('QUERY')
.debounceTime(500)
.switchMap(action =>
ajax.get('/search', {//pass some parameters},)
.map(result => ({
type: 'FETCH_SUCCESS',
payload: result.response,
})),
由于我是RxJs的新手,请建议我采取正确的方法。
答案 0 :(得分:1)
虽然技术上允许为Content-Type
请求提供请求正文(以及application/x-www-form-urlencoded
的{{1}}标题),但几乎所有服务器都认为GET
不包含GET
。相反,当需要正文时,会使用POST
(创建文档)或PUT
(更新文档)。
但是,如果您要求的只是常规的旧查询参数,这很正常,但RxJS中没有内置支持将Object转换为查询字符串 - 主要是因为没有官方规范复杂的对象/数组应该如何序列化,这样一旦你做的不仅仅是简单的密钥,每个服务器都有显着的差异 - >值。
相反,您只需将它们包含在URL中即可。我意识到你说“没有建立网址”,但缺乏规范意味着RxJS可能永远不会增加支持,因为它是高度自以为是。您可以自己手动生成字符串,也可以使用具有您喜欢的约定的第三方实用程序。
ajax.get(`/search?query=${query}&something=${something`)
// or using something like https://www.npmjs.com/package/query-string
ajax.get(`/search?${queryString.stringify(params)}`)
如果您有兴趣进一步了解查询参数的看法性质,请考虑如何序列化{ foo: [{ bar: 1 }, { bar: 2 }] }
。有人可能会说它应该是?foo[0][bar]=1&foo[1][bar]=2
,但我也看到了?foo[][bar]=1&foo[][bar]=2
,?foo[bar]=1&foo[bar]=2
和其他变体。处理重复时,事情变得更加毛茸茸。 ?foo=true&foo=false
foo
应该是真是假? (这是一个意见嘿嘿)