2016-11-14 5 views
2

次のget要求をAngularで送信する必要があります。この要求に応じて、私はparamsを取り込んでJSONデータを返すレールサーバーを用意しています。(jQueryスタイル)ネストされたオブジェクトを使用してGETパラメータをシリアル化する方法

必要なGETリクエスト:

http://localhost:8080/clients.json?c[year][]=&c[year][]=2016&c[year][]=2015

これまでの角度コード:

サーバーが認識できるように、私は、角度にお​​ける年間のパラメータに送信しますどのように
$http({method: 'GET', url: '/clients.json', params:{???}.success(function(data){ 
     //angular does something  
    }); 

c [year] [2016] - ネストされた配列形式?基本的に、私はどのように正しく???提供されたコードで?

+0

あなたはjsonデータ型llke '?year = {" time_one ":1479147348、" time_two ":1479147348}'として送信し、GETパラメータに 'json_decode()'を使用する必要があります – KDOT

+0

あなたのRailsサーバーが受け取ったデータが何であると思いますか? – lucasnadalutti

+0

[$ httpParamSerializerJQLike](https://docs.angularjs.org/api/ng/service/$httpParamSerializerJQLike)を使用してみてください。 – georgeawg

答えて

2

使用$httpParamSerializerJQLike

var myUrl = '/clients.json' 
var myParams = {c: {year: ["2015", "2016"]}}; 

$http({ 
    url: myUrl, 
    method: 'GET', 
    params: myParams, 
    paramSerializer: '$httpParamSerializerJQLike' 
}); 

$httpParamSerializerJQLikeサービスは、jQueryのparam()メソッドのロジックを以下の代替$ HTTPのparamsシリアライザです。私は実行何らかの理由

JSON: {"c":{"year":[2014,2015]}} 
Encode: c%5Byear%5D%5B%5D=2014&c%5Byear%5D%5B%5D=2015 
Decode: c[year][]=2014&c[year][]=2015 

DEMO on JSFiddle


var myParams = {c: {year: ["","2015","2016"]}}; 
var myParamsString = JSON.stringify(myParams); 
var myParamsSerial = $httpParamSerializerJQLike(myParamsSerial); 

myParamsSerialは空白として戻ってきます。何か案は?

は、オブジェクトを文字列化しないでください。

var myParams = {c: {year: ["","2015","2016"]}}; 
//DONT stringify 
//var myParamsString = JSON.stringify(myParams); 
//var myParamsSerial = $httpParamSerializerJQLike(myParamsSerial); 
//USE directly 
var myParamsSerial = $httpParamSerializerJQLike(myParams); 

のparamsシリアライザは、JavaScriptのオブジェクトではなく、JSON文字列をシリアル化します。

+0

うわー、これは素晴らしいです。 paramSerializerオプションは、$ http呼び出しで機能します。何らかの理由で、私が実行すると 'var myParams = {c:{year:[" "、" 2015 "、" 2016 "]}}; var myParamsString = JSON.stringify(myParams); var myParamsSerial = $ httpParamSerializerJQLike(myParamsSerial); ' - あなたのFiddleのように - myParamsSerialが空白に戻ります。何か案は? – HoosierCoder

+0

この[DEMO on PLNKR]で正常に動作します(https://jsfiddle.net/kq7fcqf4/)。 – georgeawg

+0

はい、それはPLNKRで完全に動作します。 – HoosierCoder

0

ご自分のサーバがあなたのGETのparamsにこのような何かを受信したい:

{c: {year: ["2015", "2016"]}}

だから、あなたはあなたの角度アプリから送信するデータは、まさにこの形式である必要があります。したがって、これは動作するはずです:

$http({method: 'GET', url: '/clients.json', params: {c: {year: ['2015', '2016']}}.success(function(data){ 
    //angular does something  
}); 
+0

を返すと、 :http:// localhost:8080/clients.json?c =%7B%22year%22:%5B%222015%22、%222016%22%5D%7D'それは[ ] – HoosierCoder

+0

Railsサーバーでは何を受け取っていますか?それが本当に重要です。 URLではなく、デバッグに使用する必要があります。 – lucasnadalutti

関連する問題