无法通过Angular $资源发布数据?

时间:2015-04-06 16:32:17

标签: javascript angularjs rest web factory

我试图弄清楚如何通过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很陌生。谢谢!

3 个答案:

答案 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});
    }
});

fiddle example