Come inviare una richiesta PUT / DELETE in jQuery?


Risposte:


924

È possibile utilizzare il metodo ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});

65
Solo una nota, se si utilizza un server Web IIS e jquery PUTo le DELETErichieste restituiscono errori 404, sarà necessario abilitare questi verbi in IIS. Ho trovato che questa è una buona risorsa: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog

22
ATTENZIONE : "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."da: api.jquery.com/jQuery.ajax/#options
andilabs

23
@Andi Come per stackoverflow.com/questions/1757187/... qualsiasi browser da IE6 su supporti questi metodi HTTP. A meno che non si stia sviluppando per un browser antico , è possibile utilizzare in sicurezza metodi http oltre a "GET" e "POST".
Martin Carney,

1
Inoltre, non è possibile trasmettere i dati del modulo . Deve passare attraverso l'URI.
xavier,

6
per le versioni successive alla 1.9 è possibile utilizzare methodotype
siti il

124

$.ajax funzionerà.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});

4
PUT is needcontentType: "application/json"
KingRider,

3
C'è qualche differenza tra questa risposta e quella di Darin Dimitrov? Suppongo che entrambi siano stati creati allo stesso tempo, e quindi non c'era alcun plagio, ma non vedo cosa aggiunge questa risposta (a parte la reputazione di 940 a Jacob).
Andrew Grimm,

72

Possiamo estendere jQuery per creare scorciatoie per PUT e 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
    });
  };
});

e ora puoi usare:

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

copia da qui


Delete non prevede i dati mentre put lo fa, per non dire che $ .get e $ .post possono avere firme diverse mentre qui li stai codificando per uno
Francisco Presencia

1
@FranciscoPresencia - 1. L'eliminazione non prevede dati mentre il put lo fa ----> La terza riga gestisce questo scenario 2. $ .get e $ .post possono avere firme diverse ----> Questo sta creando solo metodi jquery aggiuntivi per cancellare e mettere. get e post hanno i loro metodi jquery.
Mahesh,


10

Da qui , puoi farlo:

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

Fondamentalmente è solo una copia di $.post()con il parametro del metodo adattato.


9

Ecco una chiamata ajax aggiornata per quando si utilizza JSON con 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
    }
});

5

Dovresti essere in grado di usare jQuery.ajax:

Carica una pagina remota usando una richiesta HTTP.


E puoi specificare quale metodo utilizzare, con l' typeopzione :

Il tipo di richiesta da effettuare (" POST" o " GET"), il valore predefinito è " GET".
Nota: qui è possibile utilizzare anche altri metodi di richiesta HTTP, come PUTe DELETE, ma non sono supportati da tutti i browser.


4
sai quali browser non supportano PUTo DELETE?
Lea Hayes,

4
Quelli rotti, se non sono in grado di HTTP: ^)
XTL

4

ajax ()

cerca il tipo di parametro

Altri metodi di richiesta HTTP, come PUT e DELETE, possono anche essere usati qui, ma non sono supportati da tutti i browser.


3

Per brevità:

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

Nessun campo dati suppongo
Bob

1

Puoi farlo con AJAX!

Per PUTmetodo:

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

Per DELETEmetodo:

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

7
Questo è già stato detto anni prima che tu pubblicassi questa risposta. Questo è solo rumore, senza aggiungere assolutamente nulla di nuovo.
Shadow Wizard is Ear For You


0

Se hai bisogno di fare un $.postlavoro su un Laravel Route::deleteo Route::putsemplicemente aggiungere un argomento "_method"="delete"o "_method"="put".

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

Deve funzionare per altri framework

Nota: testato con Laravel 5.6 e jQuery 3


-1

È possibile includere nell'hash dei dati una chiave denominata: _method con valore 'delete'.

Per esempio:

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

Questo vale anche per


3
Questo fa solo un post.
ctrl-alt-delor,

1
Funzionerà con le rotaie, il _method viene usato per tunnelare i metodi http su POST (anche se probabilmente dovresti usarlo solo con i moduli - sono solo in grado di fare get / post).
opsb,

Questo funzionerà anche con Laravel se lo stai facendo da un modulo con il metodo POST.
John Shipp,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.