4

我有一些 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,
})

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

4

1 回答 1

9

我不知道您的服务器期望什么参数格式,但如果您想发送 JSON 有效负载,您还应该包含正确的 headers Content-Type: application/json。使用 RxJS 5 如下所示:

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

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

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

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

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

于 2017-04-17T12:00:47.440 回答