PUT请求通过URL发送params

时间:2015-08-19 18:35:36

标签: angularjs http params put angular-resource

我有一个看起来像这样的订单资源。

.factory('Order', order)

order.$inject = ['$resource', "ApiEndpoint"];

function order($resource, ApiEndpoint) {
  return $resource(ApiEndpoint.url + 'orders.json', {}, {
    create: {method: 'POST', url: ApiEndpoint.url + 'orders.json'},
    update: {method: 'PUT'},
    edit: {method: 'GET', url: ApiEndpoint.url + 'orders/edit.json'},
    remove_item: {method: 'GET', url: ApiEndpoint.url + 'orders/remove_item.json'},
  });
}

当我像这样运行Order.update

var params = {
  order: {
    line_items_attributes: {0: {quantity: 2, id: 1}}
  },
  order_id: 3
};

Order.update(params, function (resp, respHeaders) {
  console.log("response headers", respHeaders());
  console.log("change quantity resp", resp);
})

我也试过这个:

Order.update({}, params, function (resp, respHeaders) {
  console.log("response headers", respHeaders());
  console.log("change quantity resp", resp);
})

发送到服务器的参数最终位于URL内。例如,这是服务器收到的网址之一

path="/api/mobile/orders.json?order=%7B%22line_items_attributes%22:%7B%220%22:%7B%22quantity%22:8,%22id%22:356265%7D%7D%7D"

我还应该注意,服务器收到的方法是OPTIONS请求。服务器已设置为处理此问题。

由于我发送PUT请求,为什么$resource通过URL传递参数而不是有效负载的一部分?

2 个答案:

答案 0 :(得分:1)

来自docs

  

非GET“类”操作:Resource.action([parameters],postData,[success],[error])

有效负载是第二个参数,因此请尝试使用此代码

function getCommandGroups() {
    commandGroupResource.query().$promise.then(function (response) {
        $scope.commandGroups = response;
    });
}

只需将一个空对象作为第一个参数添加到update方法中。

还要查看与custom put requests

相关的部分

答案 1 :(得分:0)

如果您要更新订单,那么您应该设定订单ID,以便服务现在可以更新哪个订单

function order($resource, ApiEndpoint) {
  return $resource(ApiEndpoint.url + 'orders.json/:orderid', {}, {
    create: {method: 'POST', url: ApiEndpoint.url + 'orders.json'},
    update: {method: 'PUT',params : {orderid : '@order_id'},
    edit: {method: 'GET', url: ApiEndpoint.url + 'orders/edit.json'},
    remove_item: {method: 'GET', url: ApiEndpoint.url + 'orders/remove_item.json'},
  });
}

然后拨打电话

Order.update(params, function (resp, respHeaders) {
  console.log("response headers", respHeaders());
  console.log("change quantity resp", resp);
})