RxJS 有没有办法让 ajax 在不构建 url 的情况下获取带有参数的请求

RxJS Is there a way to make ajax get request with params without building url

我无法将参数传递给 ajax get 请求。 假设我必须将参数 {category: 'cat', type: 'type', searchKey: 'key' } 传递给 url /search 并且我有以下代码:

action$.ofType('QUERY')
    .debounceTime(500)
    .switchMap(action =>
      ajax.get('/search', {//pass some parameters},)
        .map(result => ({
          type: 'FETCH_SUCCESS',
          payload: result.response,
        })),

由于我是 RxJs 的新手,请给我建议正确的方法。

虽然技术上允许为 GET 请求提供请求 body(以及相应的 Content-Type header,如 application/x-www-form-urlencoded),但几乎所有服务器假设 GET 不包含一个。相反,当需要 body 时,使用 POST(创建文档)或 PUT(更新文档)。

但是,如果您要求的只是常规的旧查询参数,那很正常,但是 RxJS 中没有 built-in 支持将 Object 转换为查询字符串--主要是因为没有关于 objects/arrays 应该序列化多复杂的官方规范,所以一旦你做的不仅仅是简单的键 -> 值,每个服务器都有显着差异。

相反,您只需将它们包含在 URL 中。我知道你说 "without building url" 但缺少规范意味着 RxJS 可能永远不会添加支持,因为它非常自以为是。您可以自己手动生成字符串或使用具有您喜欢的约定的 third-party 实用程序。

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