2011-11-08 17 views
2

私はjQueryの$ .postので等を介してWebサービスにパラメータとして渡したいIDの配列がありますパスアレイ項目

var selections = [1,2,3,4]; 

$.post('/save', {ids: selections, function(data) { 
    // do something 
}); 

残念ながら、上記のコードは、提出を(私が欲しいものである)複数のパラメータが、同様に放火犯で検査する際を通じて送られたのparamsが見えるように、パラメータ名に「[]」を追加:配列のサイズが動的である

ids[] 1 
ids[] 2 
ids[] 3 
ids[] 4 

ので、私ができますそれをハードコーディングしないでください。これを行う動的な方法はありますか?手動でパラメータ文字列を作成しないでください。

ありがとう、 gearoid。

EDIT:

私も、私は次のように見えるジャージーWebサービスメソッドに提出してることを言及する必要があります:

@POST 
@Path("save") 
@Produces({"application/xml","application/json"}) 
@Consumes("application/x-www-form-urlencoded") 
public Response save(); 

答えて

0

私は単純に作成するために、アレイ法.joinを使用します配列のうち、文字列、およびその配列に戻し、それを変換するために、PHPのexplode機能を使用します。

JS:

var selectionsString = selections.join('|'); //returns '1|2|3|4' 

$.post('/save', {ids: selectionsString, function(data) { 
    // do something 
}); 

PHP:

$selectionsArray = explode('|', $_POST['ids']); //returns [1,2,3,4] 
+0

私はPHPで作業していません。 – Ger

+0

Fine Gearoid。しかし、確かにあなたが使っているものに似た方法があります。あるいは、あまりにも多くの手間をかけずに作成することができます。 – maxedison

+0

もちろん、あなたは私のサービス層にクライアント固有のコードを置くことを提案しています。 APIの仕事ではないさまざまな入力形式を処理するコードをAPIに書くことをお勧めします。私はWebサービスコードに触れることさえ許されていないと仮定します。 – Ger

1

ここでは、動的にjQueryを使用してparemeter文字列を作成する例である:http://jsfiddle.net/rre47/4/

var arr = {'ids' : []};//create new object (empty) 

基本的な考え方は、「下配列を持つオブジェクトを作成することですids 'キーを押します。そして、この配列にデータを追加するために、あなたのデータを反復処理:

arr.ids.push(<some value>); 

次に出力するパラメータ文字列:

decodeURIComponent($.param(arr)); 
1

使用JSONエンコーディング:

var selections = [1,2,3,4]; 
$.post('/save', {ids: selections}, function(data) { 
    // do something 
}, 
"json"); 

jQuery's post

からこれにより、文字列:'{"ids": [1,2,3,4]}'が作成され、サーバーに送信されます。

そして、あなたは、あなたの質問にタイプミスがあるようだ:

$.post('/save', {ids: selections, function(data) { 

は次のようになります。

$.post('/save', {ids: selections}, function(data) { 
+0

Hmmm、これはまだ '[]'をidsパラメータに追加するようです... – Ger

1

従来のAKA「シャロー」シリアライズをここに記載されているhttp://api.jquery.com/jQuery.param/

最初の "レベル"の結果は、角かっこなしになります。

$.ajax({ 
    url : '/save', 
    data : { 
     ids: selections 
    }, 
    traditional : true 
});