2

Play 2.0 でアプリを作成しています。
Play フォーム ジェネレーターがネイティブの http "Delete" リクエスト メソッドを生成しない限り、"Get" または "Post" に置き換える必要があります。

@form(routes.Application.delete(id), 'class -> "topRight") {
    <input type="submit" value="Delete this computer" class="btn danger">
}

Play の例によると、「投稿」は「削除」の目的で使用する必要があります。「Get」を使用すると、フォームを単純なリンクに置き換えることができるため、非常に快適ですが (特に、これらのリンクのリストが 1 つのページにある場合)。

DELETE をエミュレートするために POST を使用する理由はありますか?

4

3 に答える 3

10

代わりにPOSTエミュレートするために使用する理由は、一部の HTTP 動詞 (別名メソッド) が HTTP 仕様によって安全であると見なされているためです。これらのメソッドは、、、およびです。これが意味することは、これらの HTTP メソッドを使用してリクエストを行うときに、アプリケーションの状態の副作用があってはならないということです。ログ記録、キャッシュ、またはカウンターの増分は、アプリケーション ドメインの一部でない限り、通常、アプリケーションの状態の変更とは見なされません。DELETE GETHEADGETOPTIONSTRACE

Web フォームで直接使用するのではなく、リクエストPOSTのエミュレーションに使用する理由は、多くのブラウザーが直接サポートしていないためです。Play や​​ Rails など、ヘルパーを使用してフォーム マークアップを生成する多くの Web フレームワークは、参照されているトリックを使用して、コード内の対応する REST っぽいアクションにリクエストをマップします。詳細については、ブラウザでの HTTP メソッドのサポートを参照してください。このトピックの詳細については、この SO の質問も参照してください。HTML5 に関する W3C の最新の推奨事項によると、HTML5要素はGET または POST 以外の属性の値をサポートしていません同じことがHTML 4.01の要素にも当てはまります。DELETEDELETEDELETEFORMmethodFORM

于 2013-02-25T23:38:23.010 に答える
2

GETまたはPOSTメソッドを使用するには、JavaScript を使用する必要があります。たとえば、jQuery の $.ajax()とそのtype設定です。

Play の javascriptRoutesを使用することもできます

于 2013-02-25T23:23:41.443 に答える
0

ほとんどのブラウザーは、HTML フォームからの GET または POST 以外の HTTP 要求を実行できないため、通常、オーバーライド ヘッダーまたは特別なフォーム変数を含む HTTP POST を使用してエミュレートされます。

ブラウザからの HTTP PUT の実行を参照してください

于 2013-02-25T23:36:12.613 に答える