HTTP Getで配列を送信する


95

HTTP Getリクエストで配列を送信するにはどうすればよいですか?

GWTクライアントを使用してリクエストを送信しています。


実際、HTMLはこれを明らかにするのに優れています。コンテナ<input name="user[name]" /> <input name="user[email]" />内は、<form>すべてのブラウザでデフォルトで送信する方法を正確に知っています。入力は `user [name] = SOMETEXT&user [email] =SOME@TEXT.comになります---配列へのデコードを処理するために必要なのはホストアプリケーションです
Garet Claborn

回答:


153

これは、ターゲットサーバーが受け入れる内容によって異なります。これには明確な基準はありません。ao ウィキペディアもご覧ください:クエリ文字列

明確な標準はありませんが、ほとんどのWebフレームワークでは、単一のフィールドに複数の値を関連付けることができます(などfield1=value1&field1=value2&field2=value3)。[4] [5]

一般に、ターゲットサーバーがJava(サーブレット)などの厳密に型指定されたプログラミング言語を使用している場合は、同じ名前の複数のパラメーターとして送信できます。APIは通常、複数のパラメーター値を配列として取得するための専用メソッドを提供します。

foo=value1&foo=value2&foo=value3
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]

request.getParameter("foo")また、その上で動作しますが、それは最初の値のみを返します。

String foo = request.getParameter("foo"); // value1

また、ターゲットサーバーがPHPやRoRなどの弱い型付き言語を使用している場合[]、言語をトリガーして単一の値ではなく値の配列を返すには、パラメーター名に中括弧を付ける必要があります。

foo[]=value1&foo[]=value2&foo[]=value3
$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true

それでもを使用している場合はfoo=value1&foo=value2&foo=value3、最初の値のみが返されます。

$foo = $_GET["foo"]; // value1
echo is_array($foo); // false

foo[]=value1&foo[]=value2&foo[]=value3Javaサーブレットに送信する場合でも取得できますが、中括弧を含む正確なパラメーター名を使用する必要があることに注意してください。

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]

サーバーがnodeJsを使用する場合、配列をfoo = [value1、value2、value3]として単純に渡すことができます。req.queryでこの内部高速ルートを取得すると、{foo: '[value1、value2、value3]'}が得られます。それを解析してコードでこの配列を使用するだけです
Akshay Barpute

184

私はこの投稿が本当に古いことを知っていますが、BalusCの答えは正しいとマークされていますが、完全に正しいわけではないため、返信する必要があります。

次のように、 "[]"をfooに追加するクエリを記述する必要があります。

foo[]=val1&foo[]=val2&foo[]=val3

5
この古い投稿に返信していただきありがとうございます。それは間違いなく助けになりました。
Tha Leang 2014

@BalusCは正しくありません。これはC / C ++ / C#で完全に正常に動作します(Javaでも動作します)。同じ名前がそのように解釈されるのは、Javaの使用法のみです。あなたの答えは、URIフォーマットの誤った使い方です
Garet Claborn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.