jQuery PUT/POST ajax没有数据参数的CORS请求

Jer*_*oen 1 ajax jquery cross-domain cors

在没有传递任何数据参数的情况下,我遇到了jQuery中的PUT和POST ajax CORS请求的奇怪问题.

所以我通过设置标头在我的服务器上启用了CORS.例如,当我这样做时,一切正常:

$.ajax({
  url: "http://127.0.0.1/R/index.html",
  type: "PUT",
  data: {foo:"bar"}
});
Run Code Online (Sandbox Code Playgroud)

但是,当我在没有设置data参数的情况下执行相同的请求时,firefox会返回而不会发布ajax:

$.ajax({
  url: "http://127.0.0.1/R/index.html",
  type: "PUT"
});
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于POST和PUT方法,当在请求中指定了完整URL时,并且未指定http数据参数.当url与页面本身位于同一域时也会发生这种情况(因此不需要CORS).如果我只是在url中指定路径而不是完整的url,则不会发生这种情况.

任何线索如何在不传递任何参数的情况下进行POST/PUT(我的服务器不接受'假'参数).

Jer*_*oen 5

我很确定现在它是jQuery中的一个错误,当它在没有数据发布的情况下调用跨域ajax请求中的'multipart/form-data'编码器时.

使用以下内容可以避免这种情况:

if(jQuery.isEmptyObject(mydata)){
    $.ajax({
        url: "http://127.0.0.1/R/index.html",
        type: "PUT",
        contentType: 'application/x-www-form-urlencoded'
    });
} else {
    $.ajax({
        url: "http://127.0.0.1/R/index.html",
        type: "PUT",
        data: mydata
    });
}
Run Code Online (Sandbox Code Playgroud)