When I send this ajax rquest:
$.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");
}
});
I receive this error:
XMLHttpRequest cannot load http ://localhost:8080/wutup/venues/12. Method PATCH is not allowed by Access-Control-Allow-Methods.
However, using 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
The $.ajax
method does support HTTP PATCH.
The problem you are seeing is that the ajax
method looks for PATCH in the Access-Control-Allow-Methods
response header of the options preflight check. Either this header is missing from your response, or the PATCH method was not included in the value of this header. In either case, the problem is in the server, not in your client-side code.
Here's an example using Java:
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE");