Wie wird die DELETE-Methode in einem Link oder Formular angegeben?

Lesezeit: 4 Minuten

Benutzer-Avatar
Maurício C. Antunes

Rfc2616 listet neben GET und POST viele Methoden auf, wie beispielsweise DELETE, PUT usw. Das Methodenfeld in HTML-Formularen scheint jedoch nur GET oder POST angeben zu dürfen.

Ist es möglich, einen Link oder ein Formular in einer HTML-Seite zu erstellen, die eine Anforderungsmethode verwendet, die nicht GET oder POST ist?

  • Siehe stackoverflow.com/questions/165779/…

    – Kappen

    3. August 2011 um 12:40 Uhr

  • Nachdem ich den vorgeschlagenen Links gefolgt bin, wäre die endgültige Antwort meiner Meinung nach: Die Verwendung von etwas anderem als GET und POST ist von einer HTML-Seite ohne Skripting nicht möglich. Obwohl HTML5 für eine Weile PUT und DELETE in Formularen erlaubte, waren diese ENTFERNT.

    – Maurício C. Antunes

    18. August 2011 um 20:18 Uhr


Benutzer-Avatar
AllmächtigWarum

Ich habe versucht, dies für eine Rails-App herauszufinden, die Angular am Frontend verwendet; diese scheinen für diese Umgebung zu funktionieren:

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

Bearbeiten: Nur um allen einen Hinweis zu geben, ich denke, Sie müssen immer noch jQuery haben, damit dies funktioniert. Ich habe jQuery entfernt und es funktioniert nicht mehr; Ich legte es zurück und es fing an zu arbeiten.

  • Dieses Verhalten stammt von jquery_ujs, das Teil von jquery-rails ist. Unauffälliges Java-Script. Es ist auch das Verhalten der Daten:{confirm: ‘do you?’}.

    – Jesse Farmer

    29. Juni 2017 um 22:47 Uhr

  • wie kann ich das gleiche in schienen reagieren

    – Oshan Wisumperuma

    6. September 2019 um 10:12 Uhr

  • @OshanWisumperuma versuchen Sie es mit so etwas wie dataMethod und dataConfirm für Requisiten. Ich habe React on Rails nicht verwendet, aber wenn ich mich richtig erinnere, verwendet React camelCased-Props für bestimmte HTML-Eigenschaften: Reactjs.org/docs/dom-elements.html Sie müssen wahrscheinlich jquery_ujs haben, damit dies funktioniert; es wäre jedoch auch trivial, fetch zu verwenden und eine HTTP-DELETE-Anforderung weiterzugeben.

    – AllmächtigWarum

    7. September 2019 um 4:22 Uhr

Benutzer-Avatar
Paul D. Waite

Sie können sicherlich keinen Link erstellen, der etwas anderes als verwendet GET. Seit es HTML gibt, sollen Links idempotent und frei von Seiteneffekten sein.

Für Formulare u XMLHTTPRequestsCaps’ Link ist der richtige Ort, um nachzusehen: Sind die Methoden PUT, DELETE, HEAD usw. in den meisten Webbrowsern verfügbar?.

  • Das einzige Problem, dass meine Links mit Data-Method Attrib (von Rails kommend, war ein Fehler ..) POSTing sind! zumindest mit FF, Chrome und IE …

    – halbes Bit

    22. August 2014 um 18:22 Uhr

  • @halfbit: Das liegt an etwas JavaScript, das Rails enthält. Ich würde demütig vorschlagen, dass es eine schreckliche Idee ist, Links etwas anderes als ein HTTP GET machen zu lassen, insbesondere mit JavaScript.

    – Paul D. Waite

    22. August 2014 um 23:51 Uhr

  • oh ja, das habe ich schon herausgefunden (schade über mich). Ich habe vergessen, meinen Kommentar zu entfernen, weil falsch. sry nochmal

    – halbes Bit

    23. August 2014 um 14:31 Uhr

  • Andererseits klickt der größte Teil der Welt auf GET-Links, um Benutzerkonten in E-Mails zu überprüfen.

    – Jonny

    30. Mai 2018 um 2:26 Uhr

  • @Jonny: Mir ist nicht klar, was das mit meiner Antwort zu tun hat.

    – Paul D. Waite

    30. Mai 2018 um 9:27 Uhr

Benutzer-Avatar
Adam Sanderson

Standardmäßig gibt es keine Möglichkeit, dies zu tun. Verknüpfungen immer GETs ausführen, Formulare können GETs oder POSTs verwenden.

Das heißt, mit ein wenig JavaScript ist es möglich. Schienen zum Beispiel werden mit Helfern geliefert, die a hinzufügen data-method Attribut zu Links. Rails-UJS ist eine jQuery-Bibliothek, die Klicks auf diese Links transparent abfängt und eine Formularübermittlung mit a auslöst _method Parameter zum Überschreiben der normalen HTTP-Methode. Schließlich fängt Rack Anfragen mit a ab _method params und überschreibe die Request-Methode mit dem Wert in _method.

Andere Frameworks folgen zweifellos einem ähnlichen Muster.

Wenn Sie noch mehr Details wünschen, habe ich eine Erklärung darüber geschrieben, wie Schienen, Schienen-UJS und Rack alle arbeiten zusammen, um dies zu gewährleisten.

Es ist gut zu wissen, wie Ihre Bibliotheken funktionieren.

Es ist nicht möglich, einen Link oder ein Formular mit der Löschmethode zu erstellen.

Viele Web-Frameworks erstellen eine versteckte Eingabe namens “_method” für die Handhabung von PUT und DELETE.

Ich habe ein Plugin zum automatischen Konvertieren von Links in Formulare erstellt: RestfulizerJs

Hier können Sie einen Blick darauf werfen: https://github.com/Ifnot/RestfulizerJs

@Ifnot-Plugin ist großartig, aber ich habe eins erstellt, das auf basiert $.ajax Funktion statt Anhängen hidden Formen! Hier ist ein einfaches Beispiel für a DELETE Anfrage

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/

Benutzer-Avatar
Eduard Werenich

fügen Sie einfach ein Datenmethodenattribut hinzu,<a data-method='put' href="https://stackoverflow.com/questions/6926512/whatever">link</a>

1228480cookie-checkWie wird die DELETE-Methode in einem Link oder Formular angegeben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy