2011-12-06 37 views
17

Tôi chắc chắn câu trả lời sẽ là 'KHÔNG', nhưng tôi muốn hỏi dù sao chỉ cần trong trường hợp tôi đã bỏ lỡ điều gì đó.Sử dụng phương thức POST với HTML Anchor Tags

Ai cũng biết rằng một trong những dữ liệu vượt qua đến một trang trong một thẻ neo bằng cách sử dụng phương thức GET:

Những gì tôi đang tự hỏi là nếu có một cách để làm điều tương tự, nhưng việc sử dụng Phương thức POST thay thế?

Mục đích của tôi khi làm như vậy là giữ các URL mà người dùng thấy rõ ràng bằng cách không đặt bất kỳ thứ gì trong đó mà họ không cần xem.

Điều này không liên quan gì đến vấn đề bảo mật như tôi đã biết ở đó sẽ là cách để lấy dữ liệu được chuyển.

Nếu câu trả lời thực sự là không, thì phương pháp nào mọi người sử dụng để chuyển dữ liệu khi có mong muốn giữ URL sạch? Bánh quy? Thứ gì khác?

và làm thế nào để đối phó với các tình huống khi chiều dài URL vượt quá độ dài yêu cầu GET cho phép

Tôi đang phải đối mặt với vấn đề này trong khi thực hiện sắp xếp/pagination với displaytag, tất cả các thông số yêu cầu được phụ thêm trong các loại/url pagination chiều dài cho phép của yêu cầu GET càng cao.

Trả lời

31

Bạn có thể làm một cái gì đó như thế này:

<form id="myform" method="post" action="target.html"> 
    <input type="hidden" name="name" value="value" /> 
    <a onclick="document.getElementById('myform').submit();">click here</a> 
</form> 
+0

Đã thử điều này nhưng nó luôn luôn thực hiện GET trong chrome. Bất kỳ ý tưởng tại sao? –

+6
+0

Thật không may sự hiện diện của '

' ảnh hưởng đến bố cục. Muốn cái gì đó hoàn toàn bị ẩn đi. –

0

Bạn có thể tạo biểu mẫu tạm thời và gửi biểu mẫu trong khi sự kiện onclick của thẻ <a>.

1

Bạn có thể sử dụng javascript. Khi nhấp vào liên kết, hãy làm form.submit

Cách duy nhất tôi biết để xử lý URL dài là sử dụng POST.

4

Hành vi này là cụ thể để hiển thị thẻ thư viện. Nó cho phép dễ dàng đánh dấu kết quả tìm kiếm. Nếu bạn thực sự có ý định thay đổi điều này để sử dụng POST, thì bạn cần phải viết lại thư viện thẻ hiển thị hoặc đưa vào một số jQuery để thao tác các liên kết.

Phần còn lại của câu hỏi của bạn sẽ không xuất hiện ở đâu cả. Nếu bạn muốn GET (các yêu cầu không cần thiết, các URL có thể đánh dấu, các URL có thể thu thập thông tin tìm kiếm, vv), thì hãy sử dụng GET. Nếu bạn muốn POST (yêu cầu không phải là idempotent, URL không đánh dấu, URL không thể thu thập thông tin, v.v.), thì hãy sử dụng POST.

Thông thường, POST là bắt buộc khi yêu cầu có thể sửa đổi dữ liệu trong máy chủ. Hãy suy nghĩ về một SQL INSERT, UPDATE, DELETE, v.v. Bạn chắc chắn sẽ không thực hiện loại yêu cầu này GET. Hãy tưởng tượng rằng bạn đã có một bảng với tất cả các liên kết "xóa hàng" làm GET và sau đó một searchbot đi kèm ...

Các vấn đề liên quan