tablas - ¿Cómo crear parámetros de consulta en Javascript?
obtener datos de una tabla html javascript (10)
¿Hay alguna forma de crear los parámetros de consulta para hacer una solicitud GET en JavaScript?
Al igual que en Python tiene urllib.urlencode()
, que toma en un diccionario (o una lista de dos tuplas) y crea una cadena como ''var1=value1&var2=value2''
.
ES2017 (ES8)
Haciendo uso de Object.entries()
, que devuelve una matriz de pares de [key, value]
. Por ejemplo, para {a: 1, b: 2}
devolvería [[''a'', 1], [''b'', 2]]
. No es compatible (y no lo será) solo por IE.
Código:
const buildURLQuery = obj =>
Object.entries(obj)
.map(pair => pair.map(encodeURIComponent).join(''=''))
.join(''&'');
Ejemplo:
buildURLQuery({name: ''John'', gender: ''male''});
Resultado:
"name=John&gender=male"
Acabamos de lanzar arg.js , un proyecto destinado a resolver este problema de una vez por todas. Tradicionalmente ha sido tan difícil pero ahora puedes hacer:
var querystring = Arg.url({name: "Mat", state: "CO"});
Y la lectura funciona:
var name = Arg("name");
o obteniendo todo el lote:
var params = Arg.all();
y si te importa la diferencia entre ?query=true
y #hash=true
entonces puedes usar los Arg.query()
y Arg.hash()
.
Aqui tienes:
function encodeQueryData(data) {
let ret = [];
for (let d in data)
ret.push(encodeURIComponent(d) + ''='' + encodeURIComponent(data[d]));
return ret.join(''&'');
}
Uso:
var data = { ''first name'': ''George'', ''last name'': ''Jetson'', ''age'': 110 };
var querystring = encodeQueryData(data);
Este thread apunta a algún código para escaparse de URL en php. Hay escape()
y unescape()
que harán la mayor parte del trabajo, pero necesitas agregar un par de cosas adicionales.
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;
}
Esto debería hacer el trabajo:
const createQueryParams = params =>
Object.keys(params)
.map(k => `${k}=${encodeURI(params[k])}`)
.join(''&'');
Ejemplo:
const params = { name : ''John'', postcode: ''W1 2DL''}
const queryParams = createQueryParams(params)
Resultado:
name=John&postcode=W1%202DL
Me gusta volver a visitar esta pregunta de casi 10 años. En esta era de programación disponible, su mejor opción es configurar su proyecto usando un administrador de dependencia ( npm
). Existe toda una industria casera de bibliotecas que codifica las cadenas de consulta y se ocupa de todos los casos extremos. Este es uno de los más populares:
Si está utilizando Prototype, hay Form.serialize
Si está utilizando jQuery hay Ajax/serialize
Sin embargo, no conozco ninguna función independiente para lograr esto, pero una búsqueda en Google descubrió algunas opciones prometedoras si actualmente no está utilizando una biblioteca. Si no lo eres, sin embargo, deberías hacerlo porque son el paraíso.
Una pequeña modificación al texto mecanografiado:
public encodeData(data: any): string {
return Object.keys(data).map((key) => {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
funcional
function encodeData(data) {
return Object.keys(data).map(function(key) {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
Zabba ha proporcionado en un comentario sobre la respuesta aceptada actualmente una sugerencia que para mí es la mejor solución: use api.jquery.com/jQuery.param .
Si uso jQuery.param()
en los datos en la pregunta original, entonces el código es simplemente:
var params = jQuery.param({
var1: ''value'',
var2: ''value''
});
Los params
variables serán
"var1=value&var2=value"
Para obtener ejemplos más complicados, entradas y salidas, consulte la documentación de api.jquery.com/jQuery.param .