RxJS有没有办法在没有构建url的情况下使用params获取ajax get请求

时间:2017-04-25 09:14:52

标签: redux-observable

我无法将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的新手,请建议我采取正确的方法。

1 个答案:

答案 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应该是真是假? (这是一个意见嘿嘿)