2011-08-03 33 views
16

Rfc2616 liệt kê nhiều phương thức bên cạnh GET và POST, như, nói, DELETE, PUT vv. Trường phương thức ở dạng html, mặc dù, dường như chỉ được phép chỉ định GET hoặc POST.Cách chỉ định phương thức DELETE trong một liên kết hoặc biểu mẫu?

Có thể tạo liên kết hoặc biểu mẫu trong trang html sử dụng phương thức yêu cầu không GET hoặc POST không?

+1

Xem http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers – Caps

+2

Sau khi làm theo các liên kết được gợi ý, tôi tin rằng câu trả lời cuối cùng sẽ là: bằng cách sử dụng bất cứ điều gì nhưng GET và POST là không thể từ một trang html mà không cần script. Mặc dù html5 cho phép PUT và DELETE trong các biểu mẫu trong một thời gian, nhưng chúng được [xóa] (http://goo.gl/8EuZk). –

Trả lời

10

Bạn chắc chắn không thể tạo liên kết sử dụng bất kỳ thứ gì khác ngoài GET. Kể từ khi HTML bắt đầu, các liên kết đã được định nghĩa là không có giá trị và không có các tác dụng phụ.

Đối với biểu mẫu và XMLHTTPRequests, liên kết Mũ là nơi để xem: Are the PUT, DELETE, HEAD, etc methods available in most web browsers?.

+0

vấn đề duy nhất mà liên kết của tôi với attrib dữ liệu phương pháp (bắt nguồn từ đường ray, là một lỗi ..) được POSTING! ít nhất với FF, Chrome và IE ... – halfbit

+0

@halfbit: đó là do [một số JavaScript mà Rails bao gồm] (http://stackoverflow.com/questions/2809200/how-does-rails-3s-data-method- xóa-degrade-gracefully). Tôi cho rằng đó là một ý tưởng tồi tệ khi tạo liên kết làm bất kỳ điều gì khác ngoài HTTP GET, đặc biệt là với JavaScript. –

+0

ồ, vâng, tôi đã tìm ra điều đó (làm tôi xấu hổ). Tôi quên xóa bình luận của tôi, bởi vì sai. sry một lần nữa – halfbit

-4

chỉ cần thêm một thuộc tính dữ liệu phương pháp, <a data-method='put' href='whatever'>link</a>

+2

Bạn có thể liên kết với bất kỳ loại tài liệu nào mà điều này là chính xác không? – Jarl

+0

Bị từ chối vì câu trả lời này rất mơ hồ và dựa trên thông tin được cung cấp, nó không chính xác. Tôi không chắc làm thế nào nó đạt được số lượng upvotes cao nhất. – Simon

+0

Có thể nó là mơ hồ, nhưng thực sự nó là một trong những chính xác, và nên nhận được phiếu bầu. Đối với câu hỏi trên, nó có thể được sử dụng như thế này: 'DeleteMe' – Aleks

2

Nó không phải là có thể tạo ra một liên kết hoặc hình với phương pháp xóa.

Nhiều khuôn khổ web tạo đầu vào ẩn được gọi là "_method" để xử lý PUT và DELETE.

Tôi tạo ra một plugin cho tự động chuyển đổi các liên kết đến các hình thức: RestfulizerJs

Bạn có thể có một cái nhìn ở đây: https://github.com/Ifnot/RestfulizerJs

12

Được cố gắng để con số này ra cho một ứng dụng đường ray đã được sử dụng góc trên front end ; những điều này dường như hoạt động đối với môi trường đó:

<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a> 

Chỉnh sửa: Chỉ cần cung cấp cho mọi người một ý kiến, tôi nghĩ bạn vẫn cần jQuery để làm việc này. Tôi gỡ bỏ jQuery và nó ngừng hoạt động; Tôi đặt nó trở lại và nó bắt đầu hoạt động.

+0

Hành vi này xuất phát từ jquery_ujs, một phần của jquery-rails. Kịch bản Java không phô trương. Đó cũng là dữ liệu: hành vi {confirm: 'do you?'}. –

6

Theo mặc định, không có cách nào để thực hiện việc này. Liên kết always perform GETs, forms can use GETs or POSTs.

Điều đó nói rằng, với một chút JavaScript, có thể. Rails ví dụ tàu với những người giúp đỡ sẽ thêm một thuộc tính data-method vào liên kết. Rails-UJS là một thư viện jQuery sẽ chặn các nhấp chuột một cách minh bạch trên các liên kết này và kích hoạt gửi biểu mẫu với thông số _method được sử dụng để ghi đè phương thức HTTP bình thường. Cuối cùng Rack sẽ chặn các yêu cầu với thông số _method và ghi đè phương thức yêu cầu với giá trị trong _method.

Các khung công tác khác không nghi ngờ theo một mẫu tương tự.

Nếu bạn muốn biết thêm chi tiết, tôi đã viết một lời giải thích về cách Rails, Rails-UJS, and Rack tất cả hoạt động cùng nhau để cung cấp điều này.

Thật hữu ích khi biết thư viện của bạn hoạt động như thế nào.

+0

Liên kết của bạn đi đến một trang web localhost. Bạn có thể liên kết đến bài viết trực tuyến không? –

+0

http://www.monkeyandcrow.com/blog/reading_rails_http_delete_with_a_link/ – dtburgess

1

@Nếu plugin không tuyệt vời nhưng tôi đã tạo một plugin dựa trên chức năng $.ajax thay vì phụ thêm hidden biểu mẫu!đây là một ví dụ đơn giản cho một yêu cầu DELETE

HTML

<button class="delete" data-target="http://example.com/post/post-id/" data-method="DELETE" data-disabled="true">Delete Article</button> 

Javascript

$(".delete").restintag(optionsObj, function(data) { 
    console.log(data); 
}, 
function(error) { 
    console.log(error); 
}); 

https://github.com/KhaledElAnsari/RESTInTag/

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