我有一个看起来像这样的订单资源。
.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传递参数而不是有效负载的一部分?
答案 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);
})