【问题标题】:Can't POST data through Angular $resource?无法通过 Angular $resource 发布数据?
【发布时间】:2015-04-06 16:32:17
【问题描述】:

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

【问题讨论】:

  • 哦,还有-我可以使用$http发布数据

标签: javascript angularjs rest web factory


【解决方案1】:

您似乎正在从 angular 文档中提取资源以尝试启动和运行资源。我自己有很长一段时间,并没有发现这些文档对理解 ngResource 以及如何正确实现它很有帮助。

这篇文章把事情弄清楚了很多:

http://www.sitepoint.com/creating-crud-app-minutes-angulars-resource/

【讨论】:

    【解决方案2】:

    终于明白了。显然,请求标头需要更改。这是我添加的使它工作的代码,希望它可以帮助其他人。

    .config(function($httpProvider) {
        $httpProvider.defaults.headers.post  = {'Content-Type': 'application/x-www-form-urlencoded'};
    })
    

    【讨论】:

      【解决方案3】:

      您希望 $resource 对象做什么?

      如果您将数据对象传递给 $resource 收费函数,它会将数据作为请求负载发送到您定义的 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多