Comment envoyer une demande PUT / DELETE dans jQuery?

555

GET:$.get(..)

POST:$.post()..

Et alors PUT/DELETE?

user198729
la source
Mieux vaut que nous ayons aussi besoin de chargement
Hos Mercury

Réponses:

925

Vous pouvez utiliser la méthode ajax :

$.ajax({
    url: '/script.cgi',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});
Darin Dimitrov
la source
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) {
     //...
   }
});
Jacob Relkin
la source
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

Stepan Suvorov
la source
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é.

user2503775
la source
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
    }
});
humeur
la source
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.

Pascal MARTIN
la source
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.

patte
la source
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
  });
}
Paul Wand
la source
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
  }
});
Xanarus
la source
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

Marcos Regis
la source
-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

mumoc
la source
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
-1

Voici une simple ligne que j'utilise pour mettre plus d'une variable:

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

David White
la source
Cela ne fonctionne pas avec jQuery prêt à l'emploi.
Colin 't Hart
cela fonctionne dans le nœud / express
David White