2017-04-25 5 views
0

ajax getリクエストにparamsを渡すのに問題があります。 のは、私がURL /search{category: 'cat', type: 'type', searchKey: 'key' }のparams渡す必要があり、私は以下のコードがあるとしましょう:私はRxJsに新しいですしたようRxJS urlを構築せずにparamsでajaxリクエストを取得する方法はありますか

action$.ofType('QUERY') 
    .debounceTime(500) 
    .switchMap(action => 
     ajax.get('/search', {//pass some parameters},) 
     .map(result => ({ 
      type: 'FETCH_SUCCESS', 
      payload: result.response, 
     })), 

を、私はこれを行うための正しい方法を提案してください。

+0

私はあなたがトラブルを抱えているのかどうかはわかりません。 'switchMap()'コールバックから現在の 'action'を取得するので、あなたのアクションのペイロードにアクセスすることができます。また、 'ajax' =' Observable.ajax'ですか? –

+0

はい、私はアクションからペイロードを得ることができ、この 'ajax.get( '/ search'、action.payload)'のようにこのオブジェクトを渡しています 'これはURL '/ search'を要求しますが、リクエストと共にパラメータは送られません。 yes ajax = Obserable.ajax – duwalanise

+0

'Observable.ajax.get'の第2引数は' headers'を定義するためのものです。 URLの最初の引数のみです。ペイロードがクエリパラメータの場合は、それに応じてシリアル化する必要があります。 –

答えて

1

それはGET要求に対してリクエストボディ(およびapplication/x-www-form-urlencodedなどの対応Content-Typeヘッダ)を提供することは技術的に許容されますが、ほぼすべてのサーバーがGET、1つを含んでいないと仮定します。代わりに、POST(文書の作成)またはPUT(文書の更新)は、本文が必要な場合に使用されます。

しかし、あなたが求めているのは単に普通の古いクエリパラメータですが、それはかなり正常ですが、オブジェクトをクエリ文字列に変換するRxJSの組み込みサポートはありません - 主に公式仕様がないためです複雑なオブジェクト/配列をどのように直列化して、単純な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)}`) 

あなたはさらに、クエリの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=falsefooになりますか? (それは意見のheheです)

+0

ありがとうございます。 @jayphelps – duwalanise

+0

@duwalansiseあなたは大歓迎です!これであなたの質問が解決したら、それを受け入れたものとしてマークすることを検討してください – jayphelps

関連する問題