javascript - RxJS v5 : How to make a POST request with params?

标签 javascript ajax rxjs rxjs5 redux-observable

我有一些 RxJS 代码,这是其中的一部分:

.mergeMap(action => {
  const user = store.getState().user;
  return ajax.post(`${config.API_BASE_URL}/api/v1/rsvps`, {
    rsvp: {
      meetup_id: action.payload,
      user_id: user.id,
    }
  })
  .map(action => calendarActions.rsvpAdded(action.payload));
})

但是,我的服务器告诉我参数格式不正确:

[info] POST /api/v1/rsvps
[debug] Processing by ParrotApi.RsvpController.create/2
  Parameters: %{"rsvp" => "[object Object]"}
  Pipelines: [:api_auth]
[info] Sent 400 in 10ms

我尝试使用 JSON.stringify,但没有用。它只是使我的参数成为一个字符串。

rsvp: JSON.stringify({
  meetup_id: action.payload,
  user_id: 123,
})

参数:%{"rsvp"=> "{\"meetup_id\":1,\"user_id\":123}"}

最佳答案

我不知道你的服务器需要什么参数格式,但如果你想发送 JSON 有效负载,你还应该包含适当的 header Content-Type: application/json。对于 RxJS 5,它类似于以下内容:

ajax.post('url', {param: 42}, { 'Content-Type': 'application/json' });

现在,正文负载将自动转换为 JSON。 (参见 AjaxObservable.ts#L286

或者,如果您不想发送 header ,则需要自己将整个对象转换为 JSON:

ajax.post('url', JSON.stringify({param: 42}));

顺便说一句,您绝对不想组合使用这两种方法(包括 header 和自己调用 JSON.stringify),因为这会将相同的有效负载转换为 JSON 两次。

关于javascript - RxJS v5 : How to make a POST request with params?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450579/

相关文章:

php - 在php和mysql中创建多维数组

angular - 如何在异步管道上使用自定义管道?

angular - 如何使用 'merge' 来限制可观察值列表的并发性,但仅在所有可观察值完成后才返回?

Angular rxjs concat 2 Observables 并返回它们的元组

javascript - 如何提取嵌套对象数组中 'enabled' 对象的路径

javascript - 打开基于ajax响应的jquery-ui对话框

javascript - 如何使用Buffer.from创建Buffer View

javascript - 为什么我的 ajax 函数不能在目标 div 元素上附加 html?

javascript - 有可能调用 asp.net 函数作为正在使用的 javascript 代码吗?

javascript - 小屏幕的下拉菜单链接不好