Pergunta

Existe alguma maneira para criar o consulta parâmetros para fazer um solicitação GET em JavaScript?

Assim como em Python você tem urllib.urlencode() , que leva em um dicionário (ou lista de duas linhas) e cria uma string como 'var1=value1&var2=value2'.

Foi útil?

Solução

Aqui vai:

function encodeQueryData(data) {
   const ret = [];
   for (let d in data)
     ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));
   return ret.join('&');
}

Uso:

const data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
const querystring = encodeQueryData(data);

Outras dicas

funcional

function encodeData(data) {
    return Object.keys(data).map(function(key) {
        return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
}   

Zabba forneceu em um comentário sobre a resposta atualmente aceita uma sugestão que para mim é a melhor solução: use < a href = "http://api.jquery.com/jQuery.param/" rel = "nofollow noreferrer"> jQuery.param () .

Se eu usar jQuery.param() sobre os dados na pergunta original, em seguida, o código é simplesmente:

const params = jQuery.param({
    var1: 'value',
    var2: 'value'
});

O params variável será

"var1=value&var2=value"

Para exemplos mais complicados, entradas e saídas, consulte a jQuery.param () documentação.

URLSearchParams tem cada vez mais suporte ao navegador.

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = new URLSearchParams(data);

// searchParams.toString() === 'var1=value1&var2=value2'

Node.js oferece a querystring módulo.

const querystring = require('querystring');

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = querystring.stringify(data);

// searchParams === 'var1=value1&var2=value2'

Acabamos liberado arg.js , um projecto que visa resolver este problema de uma vez para todos. É tradicionalmente sido tão difícil, mas agora você pode fazer:

var querystring = Arg.url({name: "Mat", state: "CO"});

E obras lendo:

var name = Arg("name");

ou recebendo todo o lote:

var params = Arg.all();

e se você se preocupa com a diferença entre ?query=true e #hash=true então você pode usar os métodos Arg.query() e Arg.hash().

Este deve fazer o trabalho:

const createQueryParams = params => 
      Object.keys(params)
            .map(k => `${k}=${encodeURI(params[k])}`)
            .join('&');

Exemplo:

const params = { name : 'John', postcode: 'W1 2DL'}
const queryParams = createQueryParams(params)

Resultado:

name=John&postcode=W1%202DL

Se você estiver usando Prototype Form.serialize

Se você estiver usando jQuery Ajax / serialize

Eu não sei de quaisquer funções independentes para alcançar este objetivo, porém, mas uma pesquisa no google por ele virou-se algumas opções que prometem se você não está usando uma biblioteca. Se você não é, porém, você realmente deve porque eles são um paraíso.

Assim como para revisitar esta questão quase 10 anos de idade. Nesta época de programação off-the-shelf, sua melhor aposta é para definir o seu projeto usando um gerenciador de dependência (npm). Há uma indústria inteira de bibliotecas lá fora, que seqüências de consulta codificar e cuidar de todos os casos de ponta. Este é um dos mais populares -

https://www.npmjs.com/package/query-string

ES2017 (ES8)

Fazendo uso de Object.entries() , que devolve um conjunto de pares [key, value] do objecto. Por exemplo, para {a: 1, b: 2} ele retornaria [['a', 1], ['b', 2]]. Não é suportado (e não será) apenas pelo IE.

Código:

const buildURLQuery = obj =>
      Object.entries(obj)
            .map(pair => pair.map(encodeURIComponent).join('='))
            .join('&');

Exemplo:

buildURLQuery({name: 'John', gender: 'male'});

Resultado:

"name=John&gender=male"

Uma pequena modificação para typescript:

  public encodeData(data: any): string {
    return Object.keys(data).map((key) => {
      return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
  }

Este fio pontos para algum código para escapar URLs em php. Há escape() e unescape() que vai fazer a maior parte do trabalho, mas o que você precisa adicionar algumas coisas extras.

function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}

function urldecode(str) {
str = str.replace('+', ' ');
str = unescape(str);
return str;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top