2015-08-19 25 views
5

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?

risposta

1

dalle docs:

non Get-azioni "classe": Resource.action ([parametri], postData, [il successo], [errore])

il carico utile è la secondo argomento, provare con questo codice

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); 
}) 

basta aggiungere un oggetto vuoto come primo parametro al metodo di aggiornamento.

hanno anche uno sguardo a colui sezione relativa ai custom put requests

+0

Ho provato questo e i parametri vengono ancora caricati nell'URL. – jason328

+0

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? –

+0

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

0

Se si sta aggiornando un ordine allora si dovrebbe FTP.Specificate l'id ordine in modo che il servizio può ora che fine sta per essere aggiornato

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'}, 
    }); 
} 

e poi la tua chiamata

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

Mi dispiace ma i parametri vengono ancora passati tramite l'URL. – jason328