2008-10-07 34 views
13

Tôi đang thay đổi GET thành POST. Hiện tại tôi có .jsp? Id = a, b, c, d. Khi thay đổi điều này thành một bài đăng tôi vẫn đang ngồi tham số id a, b, c, d. Điều này không làm việc cho tôi. Tôi có thể gửi danh sách được phân cách bằng dấu phẩy cho thông số bài đăng không?ĐĂNG nhiều thông số

Trả lời

13

Tôi có sai lầm hay hầu hết các câu trả lời là bên cạnh điểm?

Để trả lời chính xác câu hỏi của bạn, có, bạn có thể gửi danh sách được phân cách bằng dấu phẩy đến thông số POST. Thành thật mà nói, tôi đã thử một cách nhanh chóng với một tập lệnh PHP, nhưng tôi không thấy lý do tại sao Java sẽ hành xử khác nhau. Một điểm với yêu cầu POST chính xác là bạn có ít ràng buộc hơn về cú pháp (không cần phải thoát = & hoặc như vậy).

Vì vậy, nếu bạn giải thích chi tiết hơn về những gì "không hoạt động", có lẽ chúng tôi có thể giúp bạn nhiều hơn.

14

Bạn có thể làm điều đó như một lựa chọn hình thức đầu vào:

url param = value1 & param = value2 & param = VALUE3

Tùy thuộc vào ngôn ngữ và thư viện bạn bạn sẽ có thể để có được một loạt các giá trị cho param.


Ví dụ với asp.net MVC tôi làm điều này để có được một mảng của chuỗi:

string[] values = Request.Form.GetValues("param"); 
13

Fionn là đúng. Sử dụng

url?param=value1&param=value2&param=value3 

để đặt nhiều giá trị cho một tham số. Để đọc các giá trị trong Servlet/JSP của bạn, bạn có thể sử dụng

String[] values = request.getParameterValues("param"); 
3

Đặt để tham số của bạn phân phối nhiều giá trị bằng cách đặt tên nó làm mảng. Thay vì kêu gọi đầu vào "id", gọi nó là "id []"

<form method="post"> 
<select multiple name="id[]"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select> 
<input type="submit" value="send"> 
</form> 

Khi chế biến, nhớ để trích xuất các mảng các giá trị được gửi bởi tham số được đặt tên.

0

trong yêu cầu bài tối thiểu 1 tham số phải có trong danh sách tham số. Nếu bạn đang thêm tham số để yêu cầu thì nó sẽ không hoạt động. cho rằng u cần gửi tham số dưới dạng trường ẩn của biểu mẫu. Hoặc hãy thử sử dụng mã sau

chức năng makePOSTRequest (url, các thông số) {

http_request = false; 
    if (window.XMLHttpRequest) { // Mozilla, Safari,... 
    http_request = new XMLHttpRequest(); 
    if (http_request.overrideMimeType) { 
     // set type accordingly to anticipated content type 
     //http_request.overrideMimeType('text/xml'); 
     http_request.overrideMimeType('text/html'); 
    } 
    } else if (window.ActiveXObject) { // IE 
    try { 
     http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try { 
      http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e) {} 
    } 
    } 
    if (!http_request) { 
    alert('Cannot create XMLHTTP instance'); 
    return false; 
    } 

    http_request.onreadystatechange = alertContents; 
    http_request.open('POST', url, true); 
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http_request.setRequestHeader("Content-length", parameters.length); 
    http_request.setRequestHeader("Connection", "close"); 
    http_request.send(parameters); 

}

0

GET và POST có hai mục đích khác nhau. Từ Wikipedia HTTP:

GET

yêu cầu một đại diện của tài nguyên quy định. Lưu ý rằng GET không nên được sử dụng cho các hoạt động gây ra tác dụng phụ, chẳng hạn như sử dụng nó để thực hiện các hành động trong các ứng dụng web. Một lý do cho điều này là GET có thể được sử dụng tùy ý bởi rô bốt hoặc trình thu thập thông tin, mà không cần phải xem xét các tác dụng phụ mà một yêu cầu sẽ gây ra. Xem các phương pháp an toàn bên dưới.

POST

Gửi dữ liệu được xử lý (ví dụ: từ biểu mẫu HTML) đến tài nguyên đã xác định. Dữ liệu được bao gồm trong phần nội dung của yêu cầu. Điều này có thể dẫn đến việc tạo tài nguyên mới hoặc cập nhật các tài nguyên hiện có hoặc cả hai.

Về cơ bản, bạn nên sử dụng GET,, GET, và POST cho bất kỳ hành động nào thay đổi trạng thái của máy chủ, chẳng hạn như thêm bản ghi mới.

1

Bạn có thể vượt qua nhiều hơn một tham số bằng cách sử dụng

 xmlhttp 
       .send("files=" + files.value + "&tagcount=" 
         + tagcount.value); 

Đây filetagcount là id của parmeters để được thông qua. Điều này đã làm việc cho kịch bản lệnh Ajax của tôi. Trong các trường hợp thông thường, bạn chỉ có thể thêm các tham số theo &. Vì vậy, các thông số có thể trông giống như

"parameter1=" + parameter1.value + "&parameter2=" + parameter2.value 
Các vấn đề liên quan