javascript – AngularJS:POST数据到外部REST API

我有一个基本的AngularJS服务设置,如:

app.factory('User', function($resource) {
return $resource('http://api.mysite.com/user/:action:id/:attr', {}, {
    history: {
        method: 'GET',
        params: {
            attr: 'history'
        }
    },
    update: {
        method: 'POST',
        params: {
            name: 'test'
        }
    }
});
});

我使用它像这样:

User.history({id: 'testID'}, function(data) {
    console.log('got history');
    console.log(data);
});
User.update({id: 'me'}, function(data) {
    console.log('updated');
    console.log(data);
});

问题一:User.update(),尽管方法设置为POST,不断发送OPTIONS作为请求方法.

虽然Chrome开发工具报告请求头访问控制请求方法:POST也被发送(不知道如果这意味着什么).

问题二:尽管在API代码中设置了这些头,

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");

此问题只显示出来,如果进行非GET请求.

处理这个问题的正确方法是什么?我也看着JSONP,但是这是一个RESTful API,我不知道如何解决的问题,只有获得支持.

你的两个问题实际上是一个问题. OPTIONS请求是CORS进程的一部分.对于POST请求,浏览器首先发送一个OPTIONS调用,如果可以执行它,则服务器进行响应.

如果OPTIONS请求失败,Angular / Chrome会在控制台中显示原因.例如:

OPTIONS https://*** Request header field Content-Type is not allowed by Access-Control-Allow-Headers. angular.min.js:106

XMLHttpRequest cannot load https://***. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

您可能还必须在服务器上设置Access-Control-Allow头文件:

header('Access-Control-Allow-Headers: Content-Type, x-xsrf-token')

x-xrsf-token用于角度’以防止CSRF.您可能需要添加更多标头,具体取决于您从客户端发送的内容.

这是一个非常好的CORS指南:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

http://stackoverflow.com/questions/17289195/angularjs-post-data-to-external-rest-api

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – AngularJS:POST数据到外部REST API