1

我无法将参数传递给 ajax 获取请求。假设我必须将参数传递{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 的新手,请建议我这样做的正确方法。

4

1 回答 1

3

虽然在技术上允许为请求提供请求主体(和相应的Content-Type标头,如application/x-www-form-urlencodedGET,但几乎所有服务器都假定GET不包含请求主体。相反,在需要正文时使用POST(创建文档)或(更新文档)。PUT

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

相反,您只需将它们包含在 URL 中。我意识到您说“不构建 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是真的还是假的?(这是一个意见嘿嘿)

于 2017-04-25T23:52:39.863 回答