2017-04-17 65 views
3

我有一些RxJS代碼,這是它的一部分: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)); 
}) 

然而,我的服務器是告訴我,PARAMS是不正確的格式:

[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}"}

+0

這個問題可能與'ajax.post()'做/不是RxJS有關。 – martin

+0

它是從rxjs observable中導入的:'從'rxjs/observable/dom/ajax'導入{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})); 

順便說一句,你肯定不希望合併這兩個方法(包括頭文件和自己調用JSON.stringify),因爲這會將相同的有效負載轉換爲JSON兩次。

+1

'{' Content-Type':'application/json'}'完成了這項工作!非常感謝 – Edmund