2017-04-17 8 views
3

私はいくつかのRxJSコードを持っており、これはそれの一部されています。しかし、私のサーバーは、paramsは適切なフォーマットになっていないことを私に語っているRxJS v5:paramsでPOSTリクエストを作成するには?

.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を使用してみました。文字列化しても動作しませんでした。それはちょうど私のパラメータを文字列にしました。

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

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

+0

この質問はおそらくRxJSの代わりに 'ajax.post()'が実行するものと関連しています。 – martin

+0

(これらの2つのメソッドはヘッダーを含み、自分自身をJSON.stringifyと呼んでいます)。しかし、それはrxjsから取り込み可能です: 'import {ajax} from 'rxjs/observable/dom/ajax';' – Edmund

答えて

7

私はフォーマットがサーバーによって期待されているものをパラメータ知りませんが、あなたはJSONペイロードを送信したい場合にも、適切なヘッダ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})); 

+1

'{' Content-Type ':' application/json '} 'は仕事をしました!本当にありがとう – Edmund

関連する問題