2012-03-21 225 views
1

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

所以我通过设置标题在我的服务器上启用了CORS。一切工作正常,当我为例子做:

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

然而,当我做同样的请求,而不设置data参数,火狐返回而没有张贴了ajax:

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

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

任何线索我怎么能做一个POST/PUT而不传递任何参数(我的服务器不会接受'假'参数)。

+0

哪些CORS标头是你设置:

它可以通过使用像这样可以避免?设置数据:null发送请求吗?你可以使用Wireshark来获取实际的请求/响应头文件吗? – monsur 2012-03-21 18:06:34

+0

根本没有请求被发送。它立即返回。我怀疑这可能是创建multipart/form-data字符串的函数中的一个错误。 – Jeroen 2012-03-21 18:37:16

回答

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 
    }); 
} 
+0

谢谢。我得到'405'错误(方法不允许),但只有一些浏览器,直到我看到这一点。为我修好了。 – quilkin 2016-06-06 17:19:47