Ho una risorsa ordine simile a quella.Richiesta PUT invio parametri tramite URL
.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'},
});
}
Quando eseguo Order.update
in questo modo
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);
})
Ho anche provato questo:
Order.update({}, params, function (resp, respHeaders) {
console.log("response headers", respHeaders());
console.log("change quantity resp", resp);
})
I params inviati al server finiscono per essere all'interno della URL. Per esempio, questo è stato uno degli URL del server ha ricevuto
path="/api/mobile/orders.json?order=%7B%22line_items_attributes%22:%7B%220%22:%7B%22quantity%22:8,%22id%22:356265%7D%7D%7D"
Vorrei anche notare che il metodo viene ricevuto dal server è una richiesta OPTIONS
. Il server è stato configurato per gestire questo.
Poiché sto inviando una richiesta PUT perché è $resource
consegnare i parametri tramite l'URL e non parte del carico utile?
Ho provato questo e i parametri vengono ancora caricati nell'URL. – jason328
la chiamata a OPTIONS deve essere causata da [CORS] (https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), l'endpoint api su un dominio diverso dall'app angolare? –
Sì, lo è. Credo che in passato abbiamo corretto questo problema poiché stavamo facendo una richiesta POST in passato e la richiesta POST non ha passato i parametri nell'URL come fa la richiesta PUT. – jason328