Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
Javascript 无法使用angular ajax,因为它显示No';访问控制允许原点';。但是可以使用xmlhttprequest和jQuery3x来完成_Javascript_Jquery_Angularjs_Ajax - Fatal编程技术网

Javascript 无法使用angular ajax,因为它显示No';访问控制允许原点';。但是可以使用xmlhttprequest和jQuery3x来完成

Javascript 无法使用angular ajax,因为它显示No';访问控制允许原点';。但是可以使用xmlhttprequest和jQuery3x来完成,javascript,jquery,angularjs,ajax,Javascript,Jquery,Angularjs,Ajax,正如问题所说,我使用xmlhttprequest类和jQueryAjax成功地从服务器加载数据,但在angular ajax中,我无法做到这一点,因为angular ajax说没有“访问控制允许源” 注意:另外,当jquery版本降级到低于3时,它也不会像angular ajax那样显示“访问控制允许源”。它们有任何连接吗 以下是jquery ajax代码,该代码正在工作,但在将版本从3降级到低于3时不起作用: <script src="https://code.jquery.com/

正如问题所说,我使用xmlhttprequest类和jQueryAjax成功地从服务器加载数据,但在angular ajax中,我无法做到这一点,因为angular ajax说没有“访问控制允许源”

注意:另外,当jquery版本降级到低于3时,它也不会像angular ajax那样显示“访问控制允许源”。它们有任何连接吗

以下是jquery ajax代码,该代码正在工作,但在将版本从3降级到低于3时不起作用:

<script   src="https://code.jquery.com/jquery-3.1.1.js"   integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA="   crossorigin="anonymous"></script>
<script>
$(document).ready(function(){ $.ajax({
        url:'http://...',
        data:"{\"city\":\"Kolkata\"}",
        method:'post',
        headers:{'Content-Type': 'application/json','accept': 'application/json'},
        success:function(data){
            console.log(data);
        },
        error:function(data){
            console.log(data);
        }
    });
});
但是angular1 ajax代码不起作用。angular1版本是最新的

$http({
        method: 'POST',
        url: '...',
        headers: {'Content-Type': 'application/x-www-form-urlencoded,application/json',
    'Accept':'application/json'},
        data: {'city':'Kolkata'}
    }).then(function successCallback(response){
        console.log(response);
        //return response;
    },function errorCallback(response){
        //return response;
        console.log(response);
    });

谢谢您的时间。

答案可能在您的chrome devtools网络选项卡中。查看每个请求的请求和响应头,特别是任何CORS头和
Origin
头,查找jQuery和Angular版本之间的差异

此外,请查看是否存在
选项
方法类型的http请求,如果存在,则angular调用可能正在尝试发送更多的头或使用凭证发送,这将为COR标记它

如果无法减少角度请求以不触发CORS,则应能够修改服务器代码,为
Access Control Allow Origin
设置一个响应头,该响应头的值为
*
,或在大多数情况下与请求头中发送的原点相匹配的字符串,尽管这实际上取决于导致您请求使用CORS的因素。您可能还需要提供带有值
*
访问控制允许标头
响应标头,或请求中发送的各个标头的名称,以逗号分隔

您的angular调用似乎正在触发CORS,因为您正在设置不受支持的
内容类型
简单请求标头:


推荐阅读-

如果我错了,请纠正我,但我认为这是因为如果请求是跨源的,jQuery会将crossDomain选项设置为true。他们在$.ajax功能中内置了CORS支持。@Tom-虽然客户端可以限制对特定请求触发CORS(省略标题等),但一旦触发CORS,就需要在服务器端设置响应标题(不能仅由jQuery客户端处理)。jQuery可能使用jsonp绕过CORS。@cchamberlain,但我认为头是在服务器端设置的。因为jQuery 3和xmlhttprequest都可以成功访问数据。所以,如果是js,我该怎么办?我需要使用angular js。在两个示例中,您在帖子上设置了不同的标题,这可能就是一个触发CORS而另一个不触发的原因。我认为您的服务器没有根据您的错误设置CORS响应头。@cchamberlain非常感谢您cchamberlain:)。我将内容类型“:”application/x-www-form-urlencoded,application/json更改为内容类型“:”application/json,并且它正在工作。再次非常感谢。你救了我一天:)
$http({
        method: 'POST',
        url: '...',
        headers: {'Content-Type': 'application/x-www-form-urlencoded,application/json',
    'Accept':'application/json'},
        data: {'city':'Kolkata'}
    }).then(function successCallback(response){
        console.log(response);
        //return response;
    },function errorCallback(response){
        //return response;
        console.log(response);
    });