Rfc2616には、たとえばDELETE、PUTなど、GETやPOST以外の多くのメソッドがリストされています。ただし、htmlフォームのメソッドフィールドでは、GETまたはPOSTのみを指定できます。
GETまたはPOSTではない要求メソッドを使用するHTMLページにリンクまたはフォームを作成することは可能ですか?
GET
以外を使用するリンクを作成することはできません。 HTMLが始まって以来、リンクはべき等であり、副作用がないことを意味してきました。
フォームとXMLHTTPRequests
の場合、Caps 'リンクは次の場所です: ほとんどのWebブラウザーでPUT、DELETE、HEADなどのメソッドが利用可能ですか? 。
フロントエンドでRailsを使用していたAngularアプリでこれを理解しようとしていました。これらはその環境で動作するようです:
<a data-confirm="Are you sure?" data-method="delete" href="/link-to-resource" rel="nofollow">Delete</a>
編集:みんなに注目を集めるために、これを機能させるにはjQueryが必要だと思います。 jQueryを削除すると動作しなくなりました。私はそれを元に戻し、機能し始めました。
デフォルトでは、これを行う方法はありません。リンク 常にGETを実行し、フォームはGETまたはPOSTを使用できます 。
とは言っても、少しのJavaScriptで可能です。 Railsたとえば、リンクにdata-method
属性を追加するヘルパーが付属しています。Rails-UJSは、これらのリンクのクリックを透過的にインターセプトし、フォーム送信をトリガーするjQueryライブラリです。通常のHTTPメソッドをオーバーライドするために使用される_method
パラメーター最後に、Rackは_method
パラメーターでリクエストをインターセプトし、リクエストメソッドを_method
の値で上書きします。
他のフレームワークも同様のパターンに従うことは間違いありません。
さらに詳細が必要な場合は、 Rails、Rails-UJS、およびRack がどのように連携してこれを提供するかの説明を書きました。
ライブラリがどのように機能するかを知っておくと便利です。
Deleteメソッドを使用してリンクまたはフォームを作成することはできません。
多くのWebフレームワークは、PUTおよびDELETEを処理するための「_method」と呼ばれる非表示の入力を作成します。
リンクをフォームに自動的に変換するプラグインを作成しました:RestfulizerJs
こちらをご覧ください: https://github.com/Ifnot/RestfulizerJs
@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);
});