我试图弄清楚如何通过Angular $resource
将数据传递给API。我当前可以GET
或查询我的测试服务器中的任何数据,但我还想了解如何向服务器POST
新数据。我正在使用我从AngularJS文档改编的代码:
.factory("ResourceTest", function($resource) {
return $resource("http://mywebsite.com/api/:id", {id:'1'}, {
charge: {method:'POST', params:{charge:true}}
});
});
当我在控制器中运行ResourceTest.charge();
时,它运行正常,我在服务器日志中看到POST
请求。但是当我在调用函数时尝试传递任何参数(例如ResourceTest.charge({test:false});
)时,请求将不会通过,并且我无法在日志中看到任何请求。 (.save()
也是如此,万一有人想知道)
任何人都知道这只是我在这里犯的代码错误吗?我对AngularJS很陌生。谢谢!
答案 0 :(得分:1)
您似乎正在从角度文档中拉出来尝试使资源启动并运行。我自己有很长一段时间,并没有找到有助于理解ngResource以及如何正确实现它的文档。
这篇文章清除了很多东西:
http://www.sitepoint.com/creating-crud-app-minutes-angulars-resource/
答案 1 :(得分:1)
终于明白了。显然,需要更改请求标头。这是我为使其工作而添加的代码,希望它可以帮助其他人。
.config(function($httpProvider) {
$httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded'};
})
答案 2 :(得分:0)
您期望$ resource对象做什么?
如果您将数据对象传递给$ resource charge函数,它会将数据作为请求有效负载发送到您定义的URL。见下面的工作示例。
myApp.factory("ResourceTest", function($resource) {
return $resource("http://mywebsite.com/api/:id", {id:'1'}, {
charge: {method:'POST', params:{charge:true}}
});
});
myApp.controller('MyCtrl', function($scope, ResourceTest) {
$scope.name = 'Superhero';
$scope.test = function (userInput) {
console.log("check the browser console Network > XHR to see the request payload");
ResourceTest.charge({'userInput':userInput});
}
});