3

$http现在,我可以使用or从 AngularJS 中的 Web 服务上的 API 获取数据,$resource但我无法发布或 PUT 日期来更新同一 Web 服务上的 API。我得到的错误是跨域问题:

XMLHttpRequest 无法加载http://rm.ws.localhost.dev/bookings/36.json。Access-Control-Allow-Origin 不允许来源http://rm.localhost.dev 。

在 Angular 中,以下代码可以“获取”数据,

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

另外,我更改了 Web 服务服务器上的配置文件,添加了两行:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"

所有这些使我通过 GET 数据访问 Web 服务,不能 PUT 或 POST。我哪里出错了或者我错过了什么。我认为 Angular 支持 POST 和 PUT。谢谢大家。

4

1 回答 1

1

我的猜测是 API/Web 服务服务器没有处理 OPTIONS 请求。跨域 PUT 将始终导致浏览器首先“预检”请求(通过 OPTIONS 请求)。带有非简单标头的跨域 POST也将以这种方式进行预检。服务器必须在对 OPTIONS 请求的响应中确认底层方法和底层非简单标头(以及 Origin)。请注意,跨域 PUT 和非简单 POST 在 IE9 或更早版本中永远无法工作,因为在那些不支持预检的浏览器中必须使用 XDomainRequest 发出跨域 ajax 请求。

于 2013-09-20T03:19:39.077 回答