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

时间:2012-03-21 06:40:13

标签: 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"}
});

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

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

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

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

1 个答案:

答案 0 :(得分: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
    });
}