L'appel jquery ajax prend-t-il en charge PATCH?

Lorsque j'envoie cette demande d'ajax:

$.ajax({ headers : { 'Accept' : 'application/json', 'Content-Type' : 'application/json' }, url : 'http://localhost:8080/wutup/venues/12', type : 'PATCH', data : JSON.stringify({description: "842490812321309213801923 gonzagazors"}), success : function(response, textStatus, jqXhr) { console.log("Venue Successfully Patched!"); }, error : function(jqXHR, textStatus, errorThrown) { // log the error to the console console.log("The following error occured: " + textStatus, errorThrown); }, complete : function() { console.log("Venue Patch Ran"); } }); 

Je reçois cette erreur:

XMLHttpRequest ne peut pas charger http: // localhost: 8080 / wutup / venues / 12. La méthode PATCH n'est pas autorisée par Access-Control-Allow-Methods.

Cependant, en utilisant curl:

  $ curl -v -H "Accept: application/json" -H "Content-type: application/json" -X PATCH - d' {"address": "8421 Gonzaga Ave"}' http://localhost:8080/wutup/venues/12 About to connect() to localhost port 8080 (#0) Trying 127.0.0.1... connected Connected to localhost (127.0.0.1) port 8080 (#0) PATCH /wutup/venues/12 HTTP/1.1 User-Agent: curl/7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8r zlib/1.2.3 Host: localhost:8080 Accept: application/json Content-type: application/json Content-Length: 57 HTTP/1.1 204 No Content Server: Apache-Coyote/1.1 Access-Control-Allow-Origin: * Date: Fri, 30 Nov 2012 08:14:35 GMT Connection #0 to host localhost left intact Closing connection #0 

La méthode $.ajax prend en charge HTTP PATCH.

Le problème que vous voyez est que la méthode ajax recherche PATCH dans l'en Access-Control-Allow-Methods tête de réponse Access-Control-Allow-Methods de la vérification des options avant vérification . Soit cet en-tête manque de votre réponse, soit la méthode PATCH n'a pas été incluse dans la valeur de cet en-tête. Dans les deux cas, le problème se trouve dans le serveur, et non dans votre code côté client.

Voici un exemple en utilisant Java:

 response.addHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE"); 

Est-ce que votre navigateur ne supporte pas la méthode PATCH?

Tiré de la documentation jQuery AJAX API :

Le type de demande à faire ("POST" ou "GET"), par défaut, est "GET". Remarque: D'autres méthodes de requêtes HTTP, telles que PUT et DELETE, peuvent également être utilisées ici, mais elles ne sont pas prises en charge par tous les navigateurs.