Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在Chrome发送选项中使用AJAX而不是GET/POST/PUT/DELETE?_Jquery_Ajax_Cross Domain - Fatal编程技术网

Jquery 在Chrome发送选项中使用AJAX而不是GET/POST/PUT/DELETE?

Jquery 在Chrome发送选项中使用AJAX而不是GET/POST/PUT/DELETE?,jquery,ajax,cross-domain,Jquery,Ajax,Cross Domain,我正在工作中开发一个内部web应用程序。在IE10中,请求可以正常工作,但在Chrome中,所有AJAX请求(有很多)都是使用选项发送的,而不是使用我定义的方法。从技术上讲,我的请求是“跨域”的。该站点是在localhost:6120上提供的,而我向其发出AJAX请求的服务是在57124上提供的。定义问题,但不是真正的修复 如何在ajax请求中使用适当的http方法 编辑: 这是在每页的文档加载中: jQuery.support.cors = true; 每个AJAX的构建都是类似的: var

我正在工作中开发一个内部web应用程序。在IE10中,请求可以正常工作,但在Chrome中,所有AJAX请求(有很多)都是使用选项发送的,而不是使用我定义的方法。从技术上讲,我的请求是“跨域”的。该站点是在localhost:6120上提供的,而我向其发出AJAX请求的服务是在57124上提供的。定义问题,但不是真正的修复

如何在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正在预处理请求以查找标题。如果请求可以接受,那么它将发送真正的请求。如果您正在跨域执行此操作,您只需处理它,或者找到一种方法使请求不跨域。这就是为什么jQuery错误被关闭,因为它不会修复。这是故意的

与上面讨论的简单请求不同,“预飞行”请求优先 通过OPTIONS方法向上的资源发送HTTP请求 其他域,以确定实际请求是否安全 发送。跨站点请求是这样预处理的,因为它们可能 对用户数据有影响。特别是,请求是 如果:

  • 它使用的方法不是GET、HEAD或POST。此外,如果POST用于发送内容类型不是的请求数据 application/x-www-form-urlencoded、多部分/表单数据或text/plain, e、 g.如果POST请求使用 application/xml或text/xml,则请求被预引导
  • 它在请求中设置自定义标头(例如,请求使用诸如X-PINGOTHER之类的标头)

Chrome正在预处理请求以查找标题。如果请求可以接受,那么它将发送真正的请求。如果您正在跨域执行此操作,您只需处理它,或者找到一种方法使请求不跨域。这就是为什么jQuery错误被关闭,因为它不会修复。这是故意的

与上面讨论的简单请求不同,“预飞行”请求优先 通过OPTIONS方法向上的资源发送HTTP请求 其他域,以确定实际请求是否安全 发送。跨站点请求是这样预处理的,因为它们可能 对用户数据有影响。特别是,请求是 如果:

  • 它使用的方法不是GET、HEAD或POST。此外,如果POST用于发送内容类型不是的请求数据 application/x-www-form-urlencoded、多部分/表单数据或text/plain, e、 g.如果POST请求使用 application/xml或text/xml,则请求被预引导
  • 它在请求中设置自定义标头(例如,请求使用诸如X-PINGOTHER之类的标头)

我同意Kevin B的观点,缺陷报告说明了一切。听起来您正在尝试进行跨域ajax调用。如果您不熟悉同一原产地政策,可以从这里开始:


如果这不是一个跨域ajax调用,请尝试将目标url设置为相对的,看看问题是否消失。如果你真的很绝望,看看JSONP,但要小心,潜在的混乱。我们真的没有什么可以帮你的了。

我同意Kevin B的观点,缺陷报告说明了一切。听起来您正在尝试进行跨域ajax调用。如果您不熟悉同一原产地政策,可以从这里开始:


如果这不是一个跨域ajax调用,请尝试将目标url设置为相对的,看看问题是否消失。如果你真的很绝望,看看JSONP,但要小心,潜在的混乱。我们真的没有什么可以为您提供帮助。

基于请求不是在默认端口80/443上发送的事实,此Ajax调用自动被视为跨源资源(CORS)请求,换句话说,这意味着请求会自动发出一个选项请求,检查服务器/servlet端的CORS头

即使设置了

crossOrigin: false;
或者即使你喜欢它


原因很简单,
localhost!=本地主机:57124
。尝试只将其发送到
localhost
而不发送端口-它将失败,因为无法访问请求的目标,但是请注意,如果域名相等则发送请求时不使用POST前的OPTIONS请求。

基于请求不是在默认端口80/443上发送的事实,此Ajax调用自动被视为跨源资源(CORS)请求,换句话说,这意味着请求会自动发出一个选项请求,检查服务器/servlet端的CORS头

即使设置了

crossOrigin: false;
或者即使你喜欢它


原因很简单,
localhost!=本地主机:57124
。尝试只将其发送到
localhost
而不发送端口-它将失败,因为无法访问请求的目标,但是请注意,如果域名相等则在POST之前发送请求而不发送选项请求。

如果可能,请使用不同的名称通过常规GET/POST传递参数,并让服务器端代码处理

我有一个类似的问题,我自己的代理绕过CORS,我得到了同样的错误后->选项在铬。在我的案例中是
授权
头(
“x-li-format”
“x-UserName”
在您的案例中)。我最终以虚拟格式传递了它(例如GET中的
authorizationjack
),我更改了代理的代码,以便在调用目标时将其转换为头。这里是PHP:

if (isset($_GET['AuthorizationJack'])) {
    $request_headers[] = "Authorization: Basic ".$_GET['AuthorizationJack'];
}

如果可能,请使用不同的名称和名称通过常规GET/POST传递参数
axios.get( url,
{ headers: {"Content-Type": "application/json"} } ).then( res => {

  if(res.data.error) {

  } else { 
    doAnything( res.data )
  }

}).catch(function (error) {
   doAnythingError(error)
});
 $.ajax({
            url: '###',
            contentType: 'text/plain; charset=utf-8',
            async: false,
            xhrFields: {
                withCredentials: true,
                crossDomain: true,
                Authorization: "Bearer ...."
            },

            method: 'POST',

            data: JSON.stringify( request ),
            success: function (data) {
                console.log(data);
            }
        });