【问题标题】:Does the jQuery ajax call support PATCH?jQuery ajax 调用是否支持 PATCH?
【发布时间】:2023-04-05 21:00:01
【问题描述】:

当我发送这个 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");
            }
        });

我收到此错误:

XMLHttpRequest 无法加载 http://localhost:8080/wutup/venues/12。 Access-Control-Allow-Methods 不允许使用 PATCH 方法。

但是,使用 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

【问题讨论】:

标签: javascript jquery ajax patch


【解决方案1】:

会不会是你的浏览器不支持 PATCH 方法?

取自jQuery AJAX API documentation

要发出的请求类型(“POST”或“GET”),默认为“GET”。注意:这里也可以使用其他 HTTP 请求方法,例如 PUT 和 DELETE,但并非所有浏览器都支持。

【讨论】:

  • 我的浏览器是 Chrome 版本 23.0.1271.91m。我会用 Firefox 试试看。
  • 浏览器似乎无关紧要。我试过用 firefox 10.0.10 拨打电话
【解决方案2】:

$.ajax 方法确实支持 HTTP PATCH。

您看到的问题是ajax 方法在选项preflight checkAccess-Control-Allow-Methods 响应标头中查找PATCH。您的响应中缺少此标头,或者此标头的值中未包含 PATCH 方法。无论哪种情况,问题都出在服务器上,而不是在您的客户端代码中。

这是一个使用 Java 的示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多