angularjs - Angular $http 返回 "no access control allow origin" header ,但 jQuery $.get 请求返回信息

标签 angularjs laravel cors

jQuery $.get, $.post 怎么能得到想要的结果而angular 不能$http.get, $http.post?为什么原始策略不适用于 angular 而是适用于 jquery?

Laravel 后端, Angular 前端。我正在考虑只使用 jQuery,因为它不会阻止 CRUD 操作在客户端发生。

我配置了 $http 和 $httpProvider ...

.run(function($http){
     $http.defaults.headers.common['Access-Control-Allow-Origin'] = "*";
     $http.defaults.headers.common['Access-Control-Allow-Methods'] = "GET, POST, PUT, DELETE, OPTIONS";
     $http.defaults.headers.common['Access-Control-Allow-Headers'] = "Authorization";
})
.config(function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
})

而laravel 正在发回适当的 header ...
App::after(function($request, $response)
{
    // header('Access-Control-Allow-Origin', '*');
     $response->headers->set('Access-Control-Allow-Origin', '*');
});

所以奇怪的是 angular $http 无法从服务器获取任何东西并产生这个错误:
XMLHttpRequest cannot load http://0.0.0.0:8000/api/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. 

但是 jQuery $.get 和 $.post 工作正常!
$.post('http://0.0.0.0:8000/api/test', function(resp){
    console.log(resp);
});

我在这里做错了什么?

最佳答案

.config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }
]);

刚设置useXDomain要真实是不够的。 AJAX 请求也与 X-Requested-With 一起发送 header ,表明它们是 AJAX。删除 header 是必要的,因此服务器不会拒绝传入的请求。

尝试在 filters.php 中添加它:
App::before(function($request)
{
    if (Request::getMethod() == "OPTIONS") {
        $headers = array(
        'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers'=> 'X-Requested-With, content-type, Authorization',);
        return Response::make('', 200, $headers);
    }
});

飞行前请求可能失败

关于angularjs - Angular $http 返回 "no access control allow origin" header ,但 jQuery $.get 请求返回信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743598/

相关文章:

javascript - 资源解释为文档,但使用 MIME 类型 application/json 进行传输

javascript - 无法创建可重用的函数来取消选中 AngularJS 中的单选按钮

php - Laravel Eloquent hasMany 按父表过滤

laravel - Laravel 中的 Remember_me cookie 在哪里检查?

api - 向 OPTIONS 请求添加身份验证

Java Rest Service POST 对 InnerClasses 属性存在分歧

nginx - 为 nginx 和乘客配置 CORS

javascript - Protractor - 检查一个元素是否在另一个元素旁边

angularjs - Angular-ui ui-select - 强制下拉菜单显示在上面

php - 引导缓存生成 routes-v7 的 laravel 问题