当前位置: 首页 > 知识库问答 >
问题:

有角度的$http.put() 工作,但$http({方法:“PUT”}) 不起作用

卢黎明
2023-03-14

我试图将所有对Rails后端进行api调用的服务整合为一个。它看起来是这样的:

angular.module('feeSuitesApp')
  .factory('FeeSuitesSvc', [
    '$http',
    function ($http) {
      var TransformInstance, Result;

      TransformInstance = function(FeeObj, obj){
        return new FeeObj(obj);
      };

      Result = function(feeSuiteObj){
        var servicePlural = feeSuiteObj.service + 's';
        return $http({
          method: feeSuiteObj.method,
          url: feeSuiteObj.url,
          params: feeSuiteObj.params,
          transformResponse: function(data){
            var w = angular.fromJson(data);
            angular.forEach(w[servicePlural], function(obj, idx){
              w[servicePlural][idx] = TransformInstance(feeSuiteObj.feeObj, obj);
            });
            return w;
          }
        })
      }

      return {
        promise: Result,
      };
  }]);

POST和GET工作正常,但PUT给了我RangeError:超过了最大调用堆栈大小

费用规则看起来像这样:

angular.module('feeSuitesApp')
  .factory('FeeRule', function(){
    //constructor
  var FeeRule = function(obj){
    this.id = obj.id || null;
    this.name = obj.name || '';
    this.fee_suite_id = obj.fee_suite_id || null;
    this.fee_parameter_id = obj.fee_parameter_id || null;
    this.multiplier = obj.multiplier || 1;
    this.addend = obj.addend || 0;
  };

  return FeeRule;
});

然而,如果我进行以下调用,一切都会完美地运行:

var url = '/api/v3/fee_rules/' + feeRule.id;
$http.put(url, { fee_rule: feeRule});

但如果我这样使用服务,就会出现堆栈溢出错误:

var feeSuiteObj = {
  url: '/api/v3/fee_rules/' + feeRule.id,
  service: 'fee_rule',
  method: 'PUT',
  params: {
    fee_rule: feeRule
  },
  feeObj: FeeRule
};

FeeSuitesSvc.promise(feeSuiteObj).then(function(success){
    $state.go('root');
  },function(error){
    console.log(error);
  });

共有1个答案

周辰沛
2023-03-14

请参阅 https://docs.angularjs.org/api/ng/service/$http#usage,没有服务也没有 feeObj 配置属性,参数也用于将序列化数据附加到 GET 请求(不是 PUT)。所以试试这个:

var feeSuiteObj = {
  url: '/api/v3/fee_rules/' + feeRule.id,
  method: 'PUT',
  data: {
    fee_rule: feeRule
  }
};

如果您需要传递服务或费用Obj,则可以在数据对象中执行此操作:

data: {
  fee_rule: feeRule,
  service: 'fee_rule',
  feeObj: FeeRule
}
 类似资料:
  • 我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下

  • 你好,我正在尝试做一个简单的Http GET请求,但是无法在ionic v2 Beta中运行... 这是我的应用程序.js: 这是我的页面1.js: 将http:http添加到构造函数时- 错误:找不到模块“./page1/page1” 我也在Page1.js尝试过: ,然后在第 1 页中的(单击)上调用生成生成请求().html但它返回这些注释: 例外:评估“单击”时出错 this.http未定

  • PUT方法在django rest框架中不起作用。 模型。派克 对应视图 当我请求页面(GET)时,它显示相应的细节(配置文件细节)。但是当我提交页面(PUT)时,它仍然转到部分,而不是。当我使用REST视图时,它工作得很好。问题出在网页视图(html)上。我错过了什么?感谢任何帮助 HTML页面

  • 所以我需要邮递员的文件。问题是我的API需要身份验证,所以我不能使用Swagger来测试它们。当我从控制器中删除授权并使用Swagger时,它会工作,但使用Postman时,它会返回以下错误。 请求的邮递员标题:

  • 我正在集群中使用hazelcast-2.5。我有一个映射(键:字符串,值:用户定义对象的ArrayList)。我可以在大多数地方put/remove fine,但在代码的一个特定部分,put操作会无声无息地失败(用于put操作的键字符串是唯一的,ArrayList也不是空的)。不会引发异常。如果涉及锁,我甚至尝试了tryPut,该调用给出了一个真实的返回值。在put操作之后,我尝试打印出映射的ke

  • 我正在Angular 9上开发一个小型宠物项目,并想尝试将其转换为PWA。已经按照指南去做了(特别是https://medium.com/javascript-in-plain-english/convert-your-angular-app-into-a-pwa-in-2019-the-painless-guide-bbf523d2ce72)。 尝试寻找解决方案,清理缓存,重建项目,更改应用程序