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


Respuestas:


924

Podrías usar el método ajax :

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

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

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í


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.


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

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.


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.


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

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

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


-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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.