小编典典

Chrome中的AJAX发送选项而不是GET / POST / PUT / DELETE吗?

ajax

我正在工作一个内部Web应用程序。在IE10中,请求工作正常,但在Chrome中,所有AJAX请求(很多)都是使用OPTIONS发送的,而不是我提供的任何已定义方法。从技术上讲,我的要求是“跨​​域”。该站点位于localhost:6120上,我向AJAX发出请求的服务位于57124上。此关闭的jquery错误定义了该问题,但不是真正的解决方法。

如何在ajax请求中使用正确的http方法?

编辑:

这在每页的文档加载中:

jQuery.support.cors = true;

每个AJAX的构建方式都类似:

var url = 'http://localhost:57124/My/Rest/Call';
$.ajax({
    url: url,
    dataType: "json",
    data: json,
    async: true,
    cache: false,
    timeout: 30000,
    headers: { "x-li-format": "json", "X-UserName": userName },
    success: function (data) {
        // my success stuff
    },
    error: function (request, status, error) {
        // my error stuff
    },
    type: "POST"
});

阅读 215

收藏
2020-07-26

共1个答案

小编典典

Chrome正在预检查找CORS标头的请求。如果请求可以接受,它将发送真实请求。如果您正在执行此跨域操作,则只需处理它,否则将找到一种使请求成为非跨域请求的方法。这就是为什么jQuery
Bug无法修复而关闭的原因。这是设计使然。

与简单请求(如上所述)不同,“预检”请求首先通过OPTIONS方法向另一个域上的资源发送HTTP请求,以确定实际请求是否可以安全发送。跨站点请求这样被预检,因为它们可能会影响用户数据。特别是在以下情况下,请求将被预检:

  • 它使用GET,HEAD或POST以外的方法。同样,如果POST用于发送请求类型为application / x-www-form-
    urlencoded,multipart / form-data或text / plain以外的Content-
    Type的请求数据,例如POST请求将XML有效负载发送给服务器使用application / xml或text / xml,则对请求进行预检。
  • 它在请求中设置自定义标头(例如,请求使用标头,例如X-PINGOTHER)
2020-07-26