Wie sende ich eine PUT / DELETE-Anfrage in jQuery?

555

GET::$.get(..)

POST::$.post()..

Was ist mit PUT/DELETE?

user198729
quelle
Besser, wir müssen auch laden
Hos Mercury

Antworten:

924

Sie können die Ajax- Methode verwenden:

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Darin Dimitrov
quelle
65
Nur ein Hinweis: Wenn Sie einen IIS-Webserver verwenden und die Abfrage PUToder DELETEAnforderungen 404-Fehler zurückgeben, müssen Sie diese Verben in IIS aktivieren. Ich habe festgestellt, dass dies eine gute Ressource ist: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog
22
Seien Sie sich"The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers."
bewusst
23
@andi Gemäß stackoverflow.com/questions/1757187/… unterstützt jeder Browser ab IE6 diese http-Methoden. Sofern Sie nicht für einen alten Browser entwickeln, können Sie http-Methoden sicher über "GET" und "POST" hinaus verwenden.
Martin Carney
1
Auch können Sie nicht in Formulardaten übergeben . Es muss die URI durchlaufen.
Xavier
6
Für Versionen nach 1.9 können Sie methododertype
Websites
124

$.ajax wird funktionieren.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});
Jacob Relkin
quelle
4
PUT ist nötigcontentType: "application/json"
KingRider
3
Gibt es einen Unterschied zwischen dieser Antwort und der von Darin Dimitrov? Ich gehe davon aus, dass beide zur gleichen Zeit geschaffen wurden, und daher gab es kein Plagiat, aber ich sehe nicht, was diese Antwort hinzufügt (abgesehen von 940 Ruf für Jacob).
Andrew Grimm
72

Wir können jQuery erweitern, um Verknüpfungen für PUT und DELETE zu erstellen:

jQuery.each( [ "put", "delete" ], function( i, method ) {
  jQuery[ method ] = function( url, data, callback, type ) {
    if ( jQuery.isFunction( data ) ) {
      type = type || callback;
      callback = data;
      data = undefined;
    }

    return jQuery.ajax({
      url: url,
      type: method,
      dataType: type,
      data: data,
      success: callback
    });
  };
});

und jetzt können Sie verwenden:

$.put('http://stackoverflow.com/posts/22786755/edit', {text:'new text'}, function(result){
   console.log(result);
})

Kopie von hier

Stepan Suworow
quelle
Löschen erwartet keine Daten, während Put es tut, um nicht zu sagen, dass $ .get und $ .post unterschiedliche Signaturen haben können, während Sie sie hier fest auf eine codieren
Francisco Presencia
1
@FranciscoPresencia - 1. Löschen erwartet keine Daten, während Put es tut ----> Die dritte Zeile behandelt dieses Szenario 2. $ .get und $ .post können unterschiedliche Signaturen haben ----> Hiermit werden nur zusätzliche Abfragemethoden erstellt zum löschen und setzen. get und post haben ihre eigenen jquery-Methoden.
Mahesh
10

Von hier aus können Sie dies tun:

/* Extend jQuery with functions for PUT and DELETE requests. */

function _ajax_request(url, data, callback, type, method) {
    if (jQuery.isFunction(data)) {
        callback = data;
        data = {};
    }
    return jQuery.ajax({
        type: method,
        url: url,
        data: data,
        success: callback,
        dataType: type
        });
}

jQuery.extend({
    put: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'PUT');
    },
    delete_: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'DELETE');
    }
});

Es ist im Grunde nur eine Kopie von $.post()mit dem angepassten Methodenparameter.

user2503775
quelle
9

Hier ist ein aktualisierter Ajax- Aufruf für die Verwendung von JSON mit jQuery> 1.9:

$.ajax({
    url: '/v1/object/3.json',
    method: 'DELETE',
    contentType: 'application/json',
    success: function(result) {
        // handle success
    },
    error: function(request,msg,error) {
        // handle failure
    }
});
Moodboom
quelle
5

Sie sollten in der Lage sein jQuery.ajax:

Laden Sie eine Remote-Seite mithilfe einer HTTP-Anforderung.


Mit der typeOption können Sie angeben, welche Methode verwendet werden soll :

Die Art der Anforderung (" POST" oder " GET") ist standardmäßig " GET".
Hinweis: Hier können auch andere HTTP-Anforderungsmethoden wie PUTund DELETEverwendet werden, die jedoch nicht von allen Browsern unterstützt werden.

Pascal MARTIN
quelle
4
Wissen Sie, welche Browser nicht unterstützen PUToder DELETE?
Lea Hayes
4
Defekte, wenn sie nicht HTTP-fähig sind: ^)
XTL
4

ajax ()

Look für param Typ

Hier können auch andere HTTP-Anforderungsmethoden wie PUT und DELETE verwendet werden, die jedoch nicht von allen Browsern unterstützt werden.

Ameisenpfote
quelle
3

Der Kürze halber:

$.delete = function(url, data, callback, type){

  if ( $.isFunction(data) ){
    type = type || callback,
    callback = data,
    data = {}
  }

  return $.ajax({
    url: url,
    type: 'DELETE',
    success: callback,
    data: data,
    contentType: type
  });
}
Paul Wand
quelle
Kein Datenfeld, denke ich
Bob
1

Sie können es mit AJAX tun!

Für PUTMethode:

$.ajax({
  url: 'path.php',
  type: 'PUT',
  success: function(data) {
    //play with data
  }
});

Für DELETEMethode:

$.ajax({
  url: 'path.php',
  type: 'DELETE',
  success: function(data) {
    //play with data
  }
});
Xanarus
quelle
7
Dies wurde bereits Jahre vor der Veröffentlichung dieser Antwort gesagt. Dies ist nur Lärm und fügt nichts Neues hinzu.
Schatten-Assistent ist Ohr für Sie
0

Wenn Sie eine $.postArbeit an einem Laravel machen Route::deleteoder Route::puteinfach ein Argument hinzufügen müssen "_method"="delete"oder "_method"="put".

$.post("your/uri/here", {"arg1":"value1",...,"_method":"delete"}, function(data){}); ...

Muss für andere Frameworks funktionieren

Hinweis: Getestet mit Laravel 5.6 und jQuery 3

Marcos Regis
quelle
-1

Sie können einen Schlüssel mit dem Namen _method mit dem Wert 'delete' in Ihren Daten-Hash aufnehmen.

Zum Beispiel:

data = { id: 1, _method: 'delete' };
url = '/products'
request = $.post(url, data);
request.done(function(res){
  alert('Yupi Yei. Your product has been deleted')
});

Dies gilt auch für

mumoc
quelle
3
Dies macht nur einen Beitrag.
Strg-Alt-Delor
1
Dies funktioniert mit Rails. Die _method wird verwendet, um http-Methoden über POST zu tunneln (obwohl Sie dies wahrscheinlich nur mit Formularen verwenden sollten - sie können nur get / post ausführen).
opsb
Dies funktioniert auch mit Laravel, wenn Sie es über ein Formular mit der POST-Methode ausführen.
John Shipp
-1

Hier ist ein einfacher Einzeiler, mit dem ich mehr als eine Variable setze:

$.put("https://your-url.com",{item1:'new item1',item2:'new items2'});

David White
quelle
Dies funktioniert nicht mit sofort einsatzbereitem jQuery.
Colin 't Hart
es funktioniert in Node / Express
David White