我是angularJs的新手,现在我想使用$ http.put来更新远程存储库中的Json文件。
但每次尝试时,都会出现以下错误
XMLHttpRequest cannot load http://blabla&action=update.
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'localhost:9080' is therefore not allowed access.
所以它不起作用。现在我在Stack和谷歌上做了我的部分搜索。很多人都说我应该添加标题。我不知道如何正确添加标头,我不知道如何验证标头是否正确添加。
有人能帮助我吗?以下是我的代码。
$http.defaults.headers.post['Access-Control-Allow-Origin'] = '*';
$http.defaults.headers.post['Access-Control-Allow-Methods'] = 'GET, POST, DELETE, PUT';
$http.defaults.headers.post['Access-Control-Allow-Credential'] = 'true';
$scope.update = function(key,value){
$scope.myData[key] = value;
$http.put('http://blabla&action=update', $scope.myData)
.success(function (data, status) {
alert('success');
})
上面的代码仍然给我同样的错误,从我的在线研究中,标题是假设解决这个问题...但它没有。我不知道自己做错了什么。谢谢你们!
答案 0 :(得分:1)
您可以将配置对象传递给$http.put
方法,如下所示:
$http({
method: 'PUT',
url: 'http://blabla&action=update',
data: $scope.myData,
headers: {
"Access-Control-Allow-Origin": "self",
<other headers here>
}
})
.success(function (data, status) {
alert('success');
});
如果您使用Chrome,则可以使用Chrome或IE和FireBug在开发者工具中验证带有请求的标头。 有关Angular Docs的更多信息。
答案 1 :(得分:0)
您的主要问题是需要在服务器上设置标头。你的错误:
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'localhost:9080' is therefore not allowed access.
是所有这一切的关键。
您正在从localhost:9080请求到foo.com/api之类的地方。该端点需要向您的应用程序返回Access-Control-Allow-Origin: localhost:9080
标头。