【发布时间】:2014-09-04 18:52:38
【问题描述】:
jQuery $.get、$.post 怎么能得到想要的结果,但 Angular 却不能 $http.get、$http.post?为什么原始策略不适用于 Angular 而适用于 jquery?
Laravel 后端,角度前端。我正在考虑只使用 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 正在发回适当的标头...
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);
});
我在这里做错了什么?
【问题讨论】:
-
+1 不知道为什么不赞成,这不是典型的 xDomain 问题
-
你的 jQuery 是从 localhost:9000 (与 angular 相同的地方)运行还是在其他地方运行?
-
您是否尝试过当前使用的其他浏览器?如果控制台上有更多错误信息,您也可以发布吗?