Comment envoyer une demande PUT / DELETE dans jQuery?


Réponses:


925

Vous pouvez utiliser la méthode ajax :

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

65
Juste une note, si vous utilisez un serveur Web IIS et que la requête PUTou les DELETErequêtes renvoient des erreurs 404, vous devrez activer ces verbes dans IIS. J'ai trouvé que c'était une bonne ressource: geekswithblogs.net/michelotti/archive/2011/05/28/…
TimDog

22
ATTENTION : "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 Selon stackoverflow.com/questions/1757187/… n'importe quel navigateur à partir d'IE6 prend en charge ces méthodes http. Sauf si vous développez pour un ancien navigateur, vous pouvez utiliser en toute sécurité les méthodes http au-delà de "GET" et "POST".
Martin Carney

1
De plus, vous ne pouvez pas transmettre de données de formulaire . Il doit passer par l'URI.
xavier

6
pour les versions après 1.9, vous pouvez utiliser methodoutype
sites

124

$.ajax marchera.

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

4
PUT est nécessairecontentType: "application/json"
KingRider

3
Y a-t-il une différence entre cette réponse et celle de Darin Dimitrov? Je suppose qu'ils ont tous deux été créés en même temps, et donc il n'y a pas eu de plagiat, mais je ne vois pas ce que cette réponse ajoute (à part la réputation de 940 pour Jacob).
Andrew Grimm

72

Nous pouvons étendre jQuery pour créer des raccourcis pour PUT et 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
    });
  };
});

et maintenant vous pouvez utiliser:

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

copier d' ici


Supprimer ne s'attend pas à ce que les données soient mises, ce qui ne veut pas dire que $ .get et $ .post peuvent avoir des signatures différentes alors qu'ici vous les codez en dur
Francisco Presencia

1
@FranciscoPresencia - 1. La suppression n'attend pas de données pendant la mise ----> La troisième ligne gère ce scénario 2. $ .get et $ .post peuvent avoir des signatures différentes ----> Cela ne fait que créer des méthodes jquery supplémentaires pour supprimer et mettre. get et post ont leurs propres méthodes jquery.
Mahesh


10

À partir d' ici , vous pouvez le faire:

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

Il s'agit simplement d'une copie du $.post()paramètre de méthode adapté.


9

Voici un appel ajax mis à jour lorsque vous utilisez JSON avec 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

Vous devriez pouvoir utiliser jQuery.ajax:

Chargez une page distante à l'aide d'une requête HTTP.


Et vous pouvez spécifier la méthode à utiliser, avec l' typeoption :

Type de demande à effectuer (" POST" ou " GET"), la valeur par défaut est " GET".
Remarque: D'autres méthodes de requête HTTP, telles que PUTet DELETE, peuvent également être utilisées ici, mais elles ne sont pas prises en charge par tous les navigateurs.


4
savez-vous quels navigateurs ne prennent pas en charge PUTou DELETE?
Lea Hayes

4
Ceux cassés, s'ils ne sont pas capables de HTTP: ^)
XTL

4

ajax ()

rechercher le type de param

D'autres méthodes de requête HTTP, telles que PUT et DELETE, peuvent également être utilisées ici, mais elles ne sont pas prises en charge par tous les navigateurs.


3

Par souci de concision:

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

Aucun champ de données je suppose
Bob

1

Vous pouvez le faire avec AJAX!

Pour la PUTméthode:

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

Pour la DELETEméthode:

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

7
Cela a déjà été dit des années avant de publier cette réponse. Ce n'est que du bruit, sans rien ajouter de nouveau.
Shadow Wizard est Ear For You


0

Si vous avez besoin de faire un $.posttravail sur un Laravel Route::deleteou Route::putsimplement d'ajouter un argument "_method"="delete"ou "_method"="put".

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

Doit fonctionner pour les autres Frameworks

Remarque: testé avec Laravel 5.6 et jQuery 3


-1

Vous pouvez inclure dans votre hachage de données une clé appelée: _method avec la valeur 'delete'.

Par exemple:

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

Cela s'appliquera également pour


3
Cela ne fait qu'un post.
ctrl-alt-delor

1
Cela fonctionnera avec les rails, la _méthode est utilisée pour tunneler les méthodes http sur POST (bien que vous ne devriez probablement l'utiliser qu'avec des formulaires - ils ne peuvent faire que get / post).
opsb

Cela fonctionnera également avec Laravel si vous le faites à partir d'un formulaire avec la méthode POST.
John Shipp

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.