2012-01-13 18 views
3

Play Frameworkバックエンドを使用してjQuery経由で値の配列をAjax経由で送信しています。ここでPlay FrameworkとjQueryのAjaxリクエスト(配列はデータ)

は例です:

$.ajax ({ 
    'type':  'POST', 
    'url':   '/url', 
    'timeout': 5000, 
    'data':  {'ids': [0, 1, 2, 3]}, 
    'dataType': 'json', 
    'success': function (oData) { 
     // Process ... 
    } 
}); 

しかし、プレイ中!、私はparams.get("ids");をすれば、私は空の値を得た、と私はまたparams.getAll("ids");をすれば。

私はどこに問題があるのか​​分かりますが、jQueryは次のようにデータを送信します:ids[]=0&ids[]=1&ids[]=2&ids[]=3 Play!フレームワークが配列データを送信することを期待しますids=0&ids=1&ids=2&ids=3

適切にデータを送信する(またはコントローラの配列としてデータを取得する)適切な方法はありますか?

これまでのところ、私はそれを簡単に動作させることができましたが、javascriptで文字列としてリクエストを作成していました。

ありがとうございました。

+0

データを 'data':{'ids':0、 'ids':1、 'ids':2、 'ids':3}として設定できますか? –

+0

@SKS、それを試してみましたか?各マップエントリでIDを消去しているので、{'ids':3}のマップになります。 – marchaos

+0

@marchaos:True、下の私の投稿を参照してください。私は手動でクエリ文字列を設定するjs関数を書くことを提案していました:( –

答えて

4

一つの方法だけで、このようなあなたのコントローラメソッドを宣言している(完全なJavaScriptコードを残す):

public static void myMethod(@As("ids[]:")List<Long> ids) { 
    System.out.println(ids.get(0)); 
} 

...出力は、あなたが期待するものである:

[0, 1, 2, 3]

+0

これは素晴らしいです!それはPlayでそれを行うための "自然な"方法ではない!たぶん私はそれらに尋ねるための切符を開く必要があります。その考えをありがとう。 –

1

私はもっと簡単な方法がありますかどうかわからないんだけど、あなただけの文字列を送信し、GSON、すなわちを使用していることをデコードすることができます:

$.ajax ({ 
    'type':  'POST', 
    'url':   '/url', 
    'timeout': 5000, 
    'data':  {'ids': '[0, 1, 2, 3]'}, 
    'dataType': 'json', 
    'success': function (oData) { 
     // Process ... 
    } 
}); 

をお使いのコントローラの中で、あなたは配列に文字列を変換することができます:

// data would be "[0, 1, 2, 3]" 
int[] intArray = gson.fromJson(data, int[].class); 
0

このソリューションは、私のために働きました。

// Sending request 
var params = { 
    myArray: [1, 2, 3, 4] 
}; 
var url = '@controllers.routes.AppController.jquery()'; 
$.post(url, params, function (data) { 
    // Process response here 
}); 

// Receiving request 
Map<String, String[]> params = request().body().asFormUrlEncoded(); 
Logger.debug("Params : " + params.size()); 
for (Map.Entry<String, String[]> param : params.entrySet()) { 
    Logger.debug(param.getKey() + " = " + param.getValue()[0]); 
} 
関連する問題