Gửi một mảng với HTTP Get


96

Làm cách nào để gửi một Mảng với yêu cầu HTTP Get?

Tôi đang sử dụng ứng dụng khách GWT để gửi yêu cầu.


thực sự, HTML làm sáng tỏ điều này tốt hơn. <input name="user[name]" /> <input name="user[email]" />bên trong vùng <form>chứa biết chính xác cách gửi theo mặc định trong tất cả các trình duyệt. đầu vào sẽ trở thành `user [name] = SOMETEXT & user [email] =SOME@TEXT.com --- nó là ứng dụng máy chủ cần để xử lý giải mã trở lại một mảng
Garet Claborn

Câu trả lời:


154

Điều đó phụ thuộc vào những gì máy chủ mục tiêu chấp nhận. Không có tiêu chuẩn cuối cùng cho điều này. Xem thêm ao Wikipedia: Chuỗi truy vấn :

Mặc dù không có tiêu chuẩn cuối cùng, hầu hết các khuôn khổ web đều cho phép nhiều giá trị được liên kết với một trường duy nhất (ví dụ field1=value1&field1=value2&field2=value3). [4] [5]

Nói chung, khi máy chủ đích sử dụng ngôn ngữ lập trình được đánh máy mạnh như Java ( Servlet ), thì bạn có thể gửi chúng dưới dạng nhiều tham số có cùng tên. API thường cung cấp một phương thức chuyên dụng để lấy nhiều giá trị tham số dưới dạng một mảng.

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

request.getParameter("foo")cũng sẽ hoạt động trên nó, nhưng nó sẽ chỉ trả về giá trị đầu tiên.

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

Và, khi máy chủ đích sử dụng ngôn ngữ được định kiểu yếu như PHP hoặc RoR, thì bạn cần đặt tên tham số bằng dấu ngoặc nhọn []để kích hoạt ngôn ngữ trả về một mảng giá trị thay vì một giá trị duy nhất.

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

Trong trường hợp bạn vẫn sử dụng foo=value1&foo=value2&foo=value3, thì nó sẽ chỉ trả về giá trị đầu tiên.

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

Xin lưu ý rằng khi bạn gửi foo[]=value1&foo[]=value2&foo[]=value3tới Java Servlet, bạn vẫn có thể lấy chúng, nhưng bạn cần sử dụng tên tham số chính xác bao gồm cả dấu ngoặc nhọn.

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

khi máy chủ sử dụng nodeJs, bạn có thể chỉ cần chuyển mảng dưới dạng foo = [value1, value2, value3]. Khi bạn lấy nó bên trong express route với req.query, bạn sẽ nhận được {foo: '[value1, value2, value3]'}. Bạn chỉ cần phân tích cú pháp và sử dụng mảng này trong mã của mình
Akshay Barpute

184

Tôi biết bài viết này thực sự cũ, nhưng tôi phải trả lời vì mặc dù câu trả lời của BalusC được đánh dấu là đúng, nó không hoàn toàn chính xác.

Bạn phải viết truy vấn thêm "[]" vào foo như sau:

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

5
Rất vui vì bạn đã trả lời bài viết cũ này! Nó chắc chắn đã giúp ích.
Tha Leang

@BalusC không chính xác, điều này hoạt động hoàn toàn tốt trong C / C ++ / C # (và có thể hoạt động trong java). Việc bạn sử dụng Java mới khiến các tên giống hệt nhau được hiểu như vậy. Tuy nhiên, câu trả lời của bạn là việc sử dụng định dạng URI không chính xác
Garet Claborn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.