2010-01-28 54 views

Respuesta

757

se puede utilizar el método de ajax:

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

Sólo una nota, si está utilizando un servidor web IIS y el jQuery '' PUT' o solicitudes DELETE' están regresando 404 errores, necesitará habilitar estos verbos en IIS. He encontrado que este es un buen recurso: http://geekswithblogs.net/michelotti/archive/2011/05/28/resolve-404-in-iis-express-for-put-and-delete-verbs.aspx – TimDog

+19

TENGA CUIDADO: '" El tipo de solicitud a realizar ("POST" o "GET"), el valor predeterminado es "GET" Nota: Otros métodos de solicitud HTTP, como PUT y DELETE, también se pueden usar aquí, pero son no soportado por todos los navegadores. "' de: http://api.jquery.com/jQuery.ajax/#options – andi

+17

@andi Según http://stackoverflow.com/questions/1757187/which-browsers-dont-support -a-http-delete-with-jquery-ajax Cualquier navegador de IE6 en es compatible con estos métodos http. A menos que esté desarrollando un navegador * ancient *, puede usar métodos http de forma segura más allá de "GET" y "POST". –

105

$.ajax va a funcionar.

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

PUT es necesario 'contentType:" application/json "' – KingRider

+1

¿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 plagio, pero no veo qué agrega esta respuesta (aparte de la reputación 940 de Jacob). –

4

ajax()

mirada de parámetro tipo

Otros métodos de petición HTTP, como PUT y DELETE, puede también se pueden usar aquí, pero no son compatibles con todos los navegadores.

5

Usted debe ser capaz de utilizar jQuery.ajax:

carga una página remota utilizando un HTTP petición.


y puede especificar el método a utilizar, con el type option:

El tipo de petición que hacer ("POST "o " GET "), por defecto es" GET" .
Nota: Otros métodos de solicitud HTTP, como PUT y DELETE, también se pueden usar aquí, pero no son compatibles con todos los navegadores .

+4

¿sabes qué navegadores no son compatibles con 'PUT' o' DELETE'? –

+3

Las rotas, si no son capaces de HTTP: ^) – XTL

0

Puede incluir en su hash de datos una clave llamada: _method con valor 'delete'.

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á para

+1

Esto simplemente hace una publicación. –

+0

Esto funcionará con rieles, el método _método se utiliza para tunelizar métodos http sobre POST (aunque probablemente solo deberías usar esto con formularios, solo pueden hacer get/post). – opsb

+0

Esto también funcionará con Laravel si lo está haciendo desde un formulario con el método POST. –

9

De here, usted puede 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'); 
    } 
}); 

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

61

Podemos extender jQuery para crear 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 que puede utilizar:

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

copia de here

+0

¡Esto es asombroso! Muchas gracias. Probé todas las variaciones tradicionales $ .ajax y no estaba teniendo suerte. Funcionó como por arte de magia. Prestigio. – mindtonic

+0

Eliminar no espera * data * while put, por no decir que $ .get y $ .post pueden tener firmas diferentes mientras que aquí está codificándolo a uno –

+0

@FranciscoPresencia - 1. Eliminar no espera datos mientras put does ----> La tercera línea maneja este escenario 2. $ .get y $ .post pueden tener diferentes firmas ----> Esto solo está creando métodos jquery adicionales para eliminar y poner. get y post tienen sus propios métodos jquery. – Mahesh

2

¡Lo puedes hacer con AJAX!

Para PUT método:

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

Para DELETE método:

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

Esto ya se dijo años antes de publicar esta respuesta. Esto es solo ruido, y no agrega nada nuevo. –

2

Por razones de brevedad:

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

PS: utilizar angular

4

Aquí hay una n informado ajax llamada para cuando se 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 
    } 
}); 
Cuestiones relacionadas