AngularJS在http.put请求中添加标头

时间:2016-01-27 18:10:11

标签: angularjs http

我是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');
    })

上面的代码仍然给我同样的错误,从我的在线研究中,标题是假设解决这个问题...但它没有。我不知道自己做错了什么。谢谢你们!

2 个答案:

答案 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标头。