¿Cómo enviar una solicitud PUT / DELETE en jQuery?

555

GET:$.get(..)

POST:$.post()..

¿Qué hay de PUT/DELETE?

usuario198729
fuente
Mejor que también necesitemos cargar
Hos Mercury

Respuestas:

924

Podrías usar el método ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Darin Dimitrov
fuente
65
Solo una nota, si está utilizando un servidor web IIS y el jquery PUTo las DELETEsolicitudes devuelven errores 404, deberá habilitar estos verbos en IIS. He encontrado que este es un buen recurso: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog
22
TENGA CUIDADO : "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."de: api.jquery.com/jQuery.ajax/#options
andilabs
23
@andi Según stackoverflow.com/questions/1757187/... cualquier navegador de IE6 en adelante admite estos métodos http. A menos que esté desarrollando para un navegador antiguo , puede usar con seguridad métodos http más allá de "GET" y "POST".
Martin Carney
1
Además, no puede pasar datos de formulario . Tiene que pasar por el URI.
xavier
66
para versiones posteriores a 1.9, puede usar methodotype
sitios del
124

$.ajax trabajará.

$.ajax({
   url: 'script.php',
   type: 'PUT',
   success: function(response) {
     //...
   }
});
Jacob Relkin
fuente
44
PUT is needcontentType: "application/json"
KingRider
3
¿Hay alguna diferencia entre esta respuesta y la de Darin Dimitrov? Supongo que ambos fueron creados al mismo tiempo y, por lo tanto, no hubo ningún plagio, pero no veo qué agrega esta respuesta (aparte de la reputación de 940 de Jacob).
Andrew Grimm
72

Podemos extender jQuery para hacer accesos directos para PUT y 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
    });
  };
});

y ahora puedes usar:

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

copia desde aquí

Stepan Suvorov
fuente
Eliminar no espera datos mientras que put lo hace, sin decir que $ .get y $ .post pueden tener firmas diferentes, mientras que aquí está codificando uno
Francisco Presencia
1
@FranciscoPresencia - 1. Eliminar no espera datos mientras que put sí ----> La tercera línea maneja este escenario 2. $ .get y $ .post pueden tener diferentes firmas ----> Esto solo está creando métodos jquery adicionales para borrar y poner. get y post tienen sus propios métodos jquery.
Mahesh
10

Desde aquí , puedes hacer esto:

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

Básicamente es solo una copia $.post()con el parámetro del método adaptado.

user2503775
fuente
9

Aquí hay una llamada ajax actualizada para cuando está utilizando 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
    }
});
humor
fuente
5

Deberías poder usar jQuery.ajax:

Cargue una página remota utilizando una solicitud HTTP.


Y puede especificar qué método debe usarse, con la typeopción :

El tipo de solicitud para realizar (" POST" o " GET"), el valor predeterminado es " GET".
Nota: Otros métodos de solicitud HTTP, como PUTy DELETE, también se pueden usar aquí, pero no son compatibles con todos los navegadores.

Pascal MARTIN
fuente
44
¿Sabes qué navegadores no son compatibles PUTo DELETE?
Lea Hayes
44
Rotas, si no son capaces de HTTP: ^)
XTL
4

ajax ()

buscar tipo de param

Aquí también se pueden usar otros métodos de solicitud HTTP, como PUT y DELETE, pero no todos los navegadores los admiten.

pata de hormiga
fuente
3

Para ser breve:

$.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
fuente
Sin campo de datos, supongo
Bob
1

¡Puedes hacerlo con AJAX!

Por PUTmétodo:

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

Por DELETEmétodo:

$.ajax({
  url: 'path.php',
  type: 'DELETE',
  success: function(data) {
    //play with data
  }
});
Xanarus
fuente
77
Esto ya se dijo años antes de que publicaras esta respuesta. Esto es solo ruido, sin agregar nada nuevo.
Shadow Wizard es Ear For You
0

Si necesita hacer un $.posttrabajo en un Laravel Route::deleteo Route::putsimplemente agregar un argumento "_method"="delete"o "_method"="put".

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

Debe funcionar para otros Frameworks

Nota: Probado con Laravel 5.6 y jQuery 3

Marcos Regis
fuente
-1

Puede incluir en su hash de datos una clave llamada: _método con el valor 'eliminar'.

Por ejemplo:

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

Esto también se aplicará a

mumoc
fuente
3
Esto solo hace una publicación.
ctrl-alt-delor
1
Esto funcionará con rieles, el método _ se usa para hacer un túnel de los métodos http sobre POST (aunque probablemente solo debería usar esto con formularios, solo pueden hacer get / post).
opsb
Esto también funcionará con Laravel si lo está haciendo desde un formulario con el método POST.
John Shipp
-1

Aquí hay una línea simple que utilizo para poner más de una variable:

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

David White
fuente
Esto no funciona con jQuery fuera de la caja.
Colin 't Hart
funciona en nodo / express
David White