web-dev-qa-db-ja.com

リンクまたはフォームでDELETEメソッドを指定する方法は?

Rfc2616には、たとえばDELETE、PUTなど、GETやPOST以外の多くのメソッドがリストされています。ただし、htmlフォームのメソッドフィールドでは、GETまたはPOSTのみを指定できます。

GETまたはPOSTではない要求メソッドを使用するHTMLページにリンクまたはフォームを作成することは可能ですか?

31

GET以外を使用するリンクを作成することはできません。 HTMLが始まって以来、リンクはべき等であり、副作用がないことを意味してきました。

フォームとXMLHTTPRequestsの場合、Caps 'リンクは次の場所です: ほとんどのWebブラウザーでPUT、DELETE、HEADなどのメソッドが利用可能ですか?

17
Paul D. Waite

フロントエンドでRailsを使用していたAngularアプリでこれを理解しようとしていました。これらはその環境で動作するようです:

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

編集:みんなに注目を集めるために、これを機能させるにはjQueryが必要だと思います。 jQueryを削除すると動作しなくなりました。私はそれを元に戻し、機能し始めました。

15
AlmightyWhy

デフォルトでは、これを行う方法はありません。リンク 常にGETを実行し、フォームはGETまたはPOSTを使用できます

とは言っても、少しのJavaScriptで可能です。 Railsたとえば、リンクにdata-method属性を追加するヘル​​パーが付属しています。Rails-UJSは、これらのリンクのクリックを透過的にインターセプトし、フォーム送信をトリガーするjQueryライブラリです。通常のHTTPメソッドをオーバーライドするために使用される_methodパラメーター最後に、Rackは_methodパラメーターでリクエストをインターセプトし、リクエストメソッドを_methodの値で上書きします。

他のフレームワークも同様のパターンに従うことは間違いありません。

さらに詳細が必要な場合は、 Rails、Rails-UJS、およびRack がどのように連携してこれを提供するかの説明を書きました。

ライブラリがどのように機能するかを知っておくと便利です。

13
Adam Sanderson

Deleteメソッドを使用してリンクまたはフォームを作成することはできません。

多くのWebフレームワークは、PUTおよびDELETEを処理するための「_method」と呼ばれる非表示の入力を作成します。

リンクをフォームに自動的に変換するプラグインを作成しました:RestfulizerJs

こちらをご覧ください: https://github.com/Ifnot/RestfulizerJs

3
Ifnot

@Ifnotプラグインは素晴らしいですが、hiddenフォームを追加する代わりに$.ajax関数に基づいてプラグインを作成しました! 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/

2