Domanda

Esiste un modo per creare i parametri di query per eseguire una richiesta GET in JavaScript?

Proprio come in Python hai urllib.urlencode () , che contiene un dizionario (o un elenco di due tuple) e crea una stringa come 'var1 = value1 & amp; var2 = value2' .

È stato utile?

Soluzione

Ecco qua:

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

Utilizzo:

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

Altri suggerimenti

funzionale

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

Zabba ha fornito in un commento sulla risposta attualmente accettata un suggerimento che per me è la soluzione migliore: usa < a href = "http://api.jquery.com/jQuery.param/" rel = "nofollow noreferrer"> jQuery.param () .

Se uso jQuery.param () sui dati nella domanda originale, il codice è semplicemente:

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

La variabile params sarà

"var1=value&var2=value"

Per esempi, input e output più complicati, consultare jQuery.param () documentazione.

URLSearchParams ha un supporto crescente per il browser.

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

const searchParams = new URLSearchParams(data);

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

Node.js offre il modulo querystring .

const querystring = require('querystring');

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

const searchParams = querystring.stringify(data);

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

Abbiamo appena rilasciato arg.js , un progetto volto a risolvere questo problema una volta e per tutti. Tradizionalmente è stato così difficile ma ora puoi farlo:

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

E opere di lettura:

var name = Arg("name");

o ottenere l'intero lotto:

var params = Arg.all();

e se ti interessa la differenza tra ? query = true e # hash = true , puoi usare Arg.query () e Arg.hash () metodi.

Questo dovrebbe fare il lavoro:

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

Esempio:

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

Risultato:

name=John&postcode=W1%202DL

Se stai usando Prototype c'è Form.serialize

Se stai usando jQuery c'è Ajax / serialize

Non conosco alcuna funzione indipendente per raggiungere questo obiettivo, però, ma una ricerca su Google per esso ha rivelato alcune opzioni promettenti se al momento non stai usando una libreria. Se non lo sei, però, dovresti davvero perché sono il paradiso.

Proprio come rivisitare questa domanda di quasi 10 anni. In questa era di programmazione standard, la soluzione migliore è impostare il progetto usando un gestore dipendenze ( npm ). Esiste un intero settore industriale di librerie là fuori che codifica stringhe di query e si occupa di tutti i casi limite. Questo è uno dei più popolari -

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

ES2017 (ES8)

Utilizzando Object. entry () , che restituisce una matrice di coppie [chiave, valore] dell'oggetto. Ad esempio, per {a: 1, b: 2} restituirebbe [['a', 1], ['b', 2]] . Non è supportato (e non lo sarà) solo da IE.

Codice:

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

Esempio:

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

Risultato:

"name=John&gender=male"

Una piccola modifica al dattiloscritto:

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

Questo thread punta ad alcuni codici per sfuggire agli URL in php. C'è escape () e unescape () che farà la maggior parte del lavoro, ma è necessario aggiungere un paio di cose extra.

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top