Jak wysłać zapytanie PUT / DELETE w jQuery?

555

GET:$.get(..)

POST:$.post()..

Co PUT/DELETE?

użytkownik198729
źródło
Lepiej, żebyśmy również potrzebowali załadunku
Hos Mercury

Odpowiedzi:

924

Możesz użyć metody ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Darin Dimitrov
źródło
65
Tylko uwaga, jeśli używasz serwera IIS, a jquery PUTlub DELETEżądania zwracają błędy 404, musisz włączyć te czasowniki w IIS. Uważam, że jest to dobry zasób: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog
22
UWAŻAJ : "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."from: api.jquery.com/jQuery.ajax/#options
andilabs
23
@andi Zgodnie z stackoverflow.com/questions/1757187 /... dowolna przeglądarka IE6 obsługuje te metody http. O ile nie tworzysz starożytnej przeglądarki, możesz bezpiecznie używać metod http poza „GET” i „POST”.
Martin Carney,
1
Nie można również przekazywać danych w formularzu . Musi przejść przez identyfikator URI.
Xavier
6
dla wersji po 1.9 możesz użyć methodlubtype
strony
124

$.ajax będzie działać.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});
Jacob Relkin
źródło
4
PUT jest potrzebącontentType: "application/json"
KingRider
3
Czy jest jakaś różnica między tą odpowiedzią a odpowiedzią Darina Dimitrova? Zakładam, że oba zostały stworzone w tym samym czasie i dlatego nie było plagiatu, ale nie rozumiem, co ta odpowiedź dodaje (oprócz reputacji 940 dla Jacoba).
Andrew Grimm
72

Możemy rozszerzyć jQuery, aby tworzyć skróty dla PUT i DELETE:

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
    });
  };
});

a teraz możesz użyć:

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

skopiuj stąd

Stepan Suworow
źródło
Funkcja usuwania nie oczekuje danych podczas wstawiania, nie wspominając o tym, że $ .get i $ .post mogą mieć różne podpisy, podczas gdy tutaj kodujesz je na
stałe
1
@FranciscoPresencia - 1. Usuń nie oczekuje danych, podczas gdy robi ----> Trzeci wiersz obsługuje ten scenariusz 2. $ .get i $ .post mogą mieć różne podpisy ----> To tylko dodatkowe metody jquery do usunięcia i umieszczenia. get i post mają swoje własne metody jquery.
Mahesh,
10

Z tutaj , można to zrobić:

/* 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');
    }
});

Jest to w zasadzie tylko kopia $.post()z dostosowanym parametrem metody.

użytkownik2503775
źródło
9

Oto zaktualizowane wywołanie ajax dla gdy używasz JSON z 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
    }
});
nastrój
źródło
5

Powinieneś być w stanie użyć jQuery.ajax:

Załaduj zdalną stronę za pomocą żądania HTTP.


I możesz określić, którą metodę należy zastosować, z typeopcją :

Typem żądania („ POST” lub „ GET”), domyślnym jest „ GET”.
Uwaga: Można tu również użyć innych metod żądania HTTP, takich jak PUTi DELETE, ale nie są one obsługiwane przez wszystkie przeglądarki.

Pascal MARTIN
źródło
4
czy wiesz, które przeglądarki nie obsługują PUTlub DELETE?
Lea Hayes,
4
Zepsute, jeśli nie są zdolne do HTTP: ^)
XTL
4

ajax ()

poszukaj typu parametru

Można tu również użyć innych metod żądania HTTP, takich jak PUT i DELETE, ale nie są one obsługiwane przez wszystkie przeglądarki.

antpaw
źródło
3

Dla zwięzłości:

$.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
źródło
Chyba brak pola danych
Bob
1

Możesz to zrobić za pomocą AJAX!

Dla PUTmetody:

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

Dla DELETEmetody:

$.ajax({
  url: 'path.php',
  type: 'DELETE',
  success: function(data) {
    //play with data
  }
});
Xanarus
źródło
7
Było to powiedziane wiele lat przed opublikowaniem tej odpowiedzi. To tylko hałas, który nie dodaje nic nowego.
Shadow Wizard is Ear For You
0

Jeśli musisz wykonać $.postpracę dla Laravela Route::deletelub Route::putpo prostu dodać argument "_method"="delete"lub "_method"="put".

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

Musi działać dla innych frameworków

Uwaga: Testowane z Laravel 5.6 i jQuery 3

Marcos Regis
źródło
-1

Do skrótu danych możesz dołączyć klucz o nazwie: _method z wartością „delete”.

Na przykład:

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

Dotyczy to również

mumoc
źródło
3
To tylko robi post.
ctrl-alt-delor
1
Będzie to działało z szynami, _method służy do tunelowania metod http przez POST (chociaż prawdopodobnie powinieneś używać tego tylko z formularzami - są one w stanie tylko pobierać / wysyłać).
opsb
Będzie to również działać z Laravelem, jeśli robisz to z formularza metodą POST.
John Shipp,
-1

Oto prosty jednoliniowy, którego używam do umieszczenia więcej niż jednej zmiennej:

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

David White
źródło
To nie działa z jQuery po wyjęciu z pudełka.
Colin 't Hart
działa w węźle / ekspresie
David White