Dados pós-x-www-form-urlencoded com Restangular

Problema

Às vezes, os servidores REST querem “x-www-form” tradicional – dados codificados por url em qualquer solicitação, que se parece com:

first=bonjour&second=salut

No entanto , o Restangular , como qualquer bom framework REST, enviará nativamente os dados em JSON. Tive dificuldade em entender como poderia enviar meus dados com Restangular. Nota: Jquery está enviando dados codificados por url nativamente:

var data = {
"first": "bonjour",
"second": "salut"
};

$
.ajax({
type
: "POST",
url
: 'http://myre.ch',
data
: data,
success
: function() {
//...
}
});

Solução

O primeiro componente que nos ajudará é $ .param . Ele serializará nosso objeto em uma string seguindo o padrão urlencode.

var date_encoded = $.param(data); // = "first=bonjour&second=salut"

E aí vem o truque. Ele não aparece na documentação do Restangular, mas irá postar todos os dados que você passar , ou seja, você pode definir como uma string e será incluído no corpo da solicitação. Portanto, o resto é uma questão de colocar os parâmetros corretos e voila, você está enviando dados codificados por url:.customPOST([elem, path, params, headers])elemelem

Restangular.oneUrl('myre', 'http://myre.ch'
.customPOST(
date_encoded
,
undefined, // put your path here
undefined, // params here, e.g. {format: "json"}
{'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8"}
);

Razão

Por que não usar a solução jquery? Bem, porque o Restangular tem todos esses recursos incríveis … e especialmente porque em muitos casos você vai precisar das promessas que dão o Restangular direto da caixa. Para fazer uma solicitação de promessa com jquery é duas vezes mais código.