【问题标题】:jQuery PUT/POST ajax CORS requests with no data arguments没有数据参数的 jQuery PUT/POST ajax CORS 请求
【发布时间】:2012-04-05 16:24:16
【问题描述】:

在不传递任何数据参数时,我在 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 的任何线索(我的服务器不接受“假”参数)。

【问题讨论】:

  • 您设置了哪些 CORS 标头?设置 data:null 是否发送请求?你可以使用 Wireshark 来获取实际的请求/响应标头吗?
  • 根本没有发送请求。它立即返回。我怀疑这可能是创建 multipart/form-data 字符串的函数中的错误。

标签: ajax jquery cross-domain cors


【解决方案1】:

我现在很确定这是 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
    });
}

【讨论】:

  • 谢谢。我收到 '405' errors (Method Not Allowed) ,但仅限于某些浏览器,直到我看到这个。为我修好了。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2016-11-27
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多