¿Cómo pasar una matriz como parámetro de URL?

4 minutos de lectura

avatar de usuario
Leff

Me gustaría pasar una matriz y agregarla a un enlace en mi página como un parámetro de URL, porque más adelante en el lado del servidor necesito los valores de la matriz. ¿Cómo debo hacer eso?

myArray = ['aaa', 'bbb', 'ccc'];

$('#myLink').attr({"href" : '/myLink?array=' + myArray});

No estoy seguro de si esa es la forma correcta de hacer esto.

  • “¿Cómo debo hacer eso?” Eso realmente depende del idioma del lado del servidor que esté usando y cómo espera que se formatee la información. Por ejemplo, ¿el servidor espera JSON? ¿O un parámetro por valor? ¿Una lista de valores separados por comas? ¿Algo más?

    – Félix Kling

    08/11/2016 a las 17:35


  • Ya que estás usando jQuery, puedes probar $.param({ array: myArray }, true);

    – haim770

    8 de noviembre de 2016 a las 17:36

  • La respuesta es que no puedes, no con Javascript. Todas las soluciones que termines no serían en realidad algo que pasarías. Lo que puede hacer es pasar un parámetro similar a una matriz y devolverlo con su idioma del lado del servidor. ¿Por qué necesita pasar toda la matriz de todos modos?

    – marco

    8 de noviembre de 2016 a las 17:37

  • @FelixKling estoy usando laravel en el lado del servidor

    – Leff

    8 de noviembre de 2016 a las 17:39

  • stackoverflow.com/questions/18417265/… Verifique el enlace anterior.

    – Okkyajy

    14 de junio de 2019 a las 11:48

avatar de usuario
rodrigocfd

Puede serializar el JSON:

myArray = ['aaa', 'bbb', 'ccc'];
var arrStr = encodeURIComponent(JSON.stringify(myArray));
$('#myLink').attr({ href: '/myLink?array=' + arrStr });

Si su análisis (en la página siguiente) también se realiza a través de JavaScript, usará a la inversa JSON.parse(). En PHP sería json_decodificar().

avatar de usuario
pequeño santi

No debería depender del lado del servidor: según la especificación estándar de URI, todos los parámetros deben tener un nombre y un valor. Pero puede haber varios parámetros con el mismo nombre, que es la forma correcta de serializar una matriz:

http://servidor/contexto?array=aaa&array=bbb&array=ccc&otherparameter=x

Podrías hacerlo así:

var s="";
for (var i=0;i< myArray.length;i++)
{
  s+="&myArray="+myArray[i];
}
var url="http://server/context?"+s;

  • esta bien pero necesito editar s+="&myArray="+myArray[i]; a s+="&myArray[]="+myArray[i];

    – meegipto

    22 de abril de 2020 a las 8:02

  • @megyptm No, en absoluto. Mi enfoque producirá múltiples valores para el parámetro llamado “myArray”. Como dices, sería a un parámetro llamado “myArray[]”.

    – El pequeño Santi

    22 de abril de 2020 a las 10:33

  • ¿Por qué no usar? URLSearchParams? con métodos .append y .toString

    –Diego Lope Loyola

    15 de noviembre de 2021 a las 18:44


prueba esto

$('#myLink').attr({"href" : '/myLink?array=' + myArray.join(',')});

en el servidor: capturar y dividir datos.

  • forma limpia y elegante de lograrlo.

    – Jawand Singh

    10 oct 2021 a las 22:55

avatar de usuario
StefanBob

Cómo pasar una matriz de cadenas como parámetros de URL:

const myLink = 'https:/example.com/api'
const myArray = ['aaa', 'bbb', 'ccc'];
let apiUrl = `${myLink}/query?`;

myArray.forEach((x, i) => {
  if (i === 0) {
    apiUrl += `array=${x}`;
  } else {
    apiUrl += `&array=${x}`;
  }
});

console.log(apiUrl);
document.body.innerHTML = apiUrl;

Mi acercamiento:

var myArray = ['aaa', 'bbb', 'ccc'];
var baseUrl="/myLink";
var paramName="array=";

var arrayAsString = '?' + paramName + myArray.join('&' + paramName);
var urlWithParams = baseUrl + arrayAsString;

window.location.href = urlWithParams;

avatar de usuario
Ahmet Firat Keler

Otra forma de hacerlo es la siguiente

import Router from 'next/router'

Router.push({
  pathname: '/search',
  query: {searchTerm: searchRef.current ? searchRef.current["value"] : '', codeSets: JSON.stringify(selectedCodeSets)}
}, '/search');

selectedCodeSets en este ejemplo es una matriz de datos de estado

const [selectedCodeSets, setSelectedCodeSets] = useState<any>(['1']);

Podemos analizar esos datos en la página dirigida como a continuación

import {withRouter} from 'next/router'

const DaComponent = (props) => {
  useEffect(() => {
        let codeSets = JSON.parse(props.router.query.codeSets);
  }, [props.router]);
};

export default withRouter(DaComponent);

avatar de usuario
Salman Ashraf

myArray = ['aaa', 'bbb', 'ccc'];
myArrString = JSON.stringify(myArray.join("_"))

$('#myLink').attr({"href" : `/myLink?array=${myArrString}`});

Y luego, cuando lo necesite más adelante, puede analizarlo y luego recuperar su matriz así

JSON.parse(myArrString).split("_")

¿Ha sido útil esta solución?