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