为什么AngularJS将HTTP PUT数据放在URL而不是body中?

时间:2014-10-18 04:20:57

标签: javascript angularjs

我有两项服务:

var PlanResource = $resource('/api/v1/plan/:planId', {}, {
  'update':  { method:'PUT', params:{ planId : '@_id.$oid' }, isArray : false },
});

var UserResource = $resource('/api/v1/user', {}, {
    'update': {method:'PUT', params:{ }, isArray : false},
});

当我在第一次调用update时,它将我传递的数据放入正文中,而第二次将数据放入URL中,例如:

PUT /api/v1/user?profiles=%7B%22skeleton%22:false,%data%22:234

为什么会发生这种情况,如何让第二个将数据放入正文?

编辑:

用法是:

ctrl.user.$update({'profiles' : appCtrl.user.profiles}).then(function() {

ctrl.plan.$update({name: planName});

1 个答案:

答案 0 :(得分:4)

您能否显示您的使用代码?

一般情况下,你不应该将你打算放入身体的任何价值放入" params"。它们应该属于一个单独的论点。在$ resource文档中,有

non-GET "class" actions: Resource.action([parameters], postData, [success], [error])

所以你应该尝试像:

UserResource.update({
    // URL params here.
}, profiles   // Body here.
, ..., ...);

编辑:

在更新时,您使用的是实例方法而不是类方法。在文档中,它说:

non-GET instance actions: instance.$action([parameters], [success], [error])

在实例方法调用中,您只能传入URL参数。请求的主体将自动成为对象本身(在您的情况下, ctrl.user 将是正文)。

如果您确实想要将请求主体修改为对象本身以外的其他内容,请改用类方法。

$ resource的文档在这里:

https://docs.angularjs.org/api/ngResource/service/ $资源