65 votos

¿Cómo escapar una cadena JSON para tenerlo en una dirección URL?

El uso de Javascript, quiero generar un enlace a una página. Los parámetros de la página están en un array de Javascript que me serializar en JSON.

Así que me gustaría generar una URL como la siguiente :

http://example.com/?data="MY_JSON_ARRAY_HERE"

¿Cómo tengo que escapar de mi cadena JSON (array serializado) para incluir como parámetro en la URL ?

Si no hay una solución usando JQuery me encantaría.

Nota: Sí, los parámetros a la página de la necesidad de estar en una matriz, porque hay un montón de ellos. Creo que voy a usar poco.ly para acortar los enlaces después.

11voto

Darin Dimitrov Puntos 528142

Puede utilizar el encodeURIComponent a salvo URL codificar partes de una cadena de consulta:

var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);

o si va a enviar esto como una petición AJAX:

var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
    url: 'http://example.com/',
    type: 'GET',
    data: { data: array },
    success: function(result) {
        // process the results
    }
});

6voto

jcj80 Puntos 111

Yo estaba buscando para hacer la misma cosa. el problema para mí era mi url de la era de llegar demasiado tiempo. He encontrado una solución hoy en día el uso de Bruno Jouhier del jsUrl.js biblioteca

https://raw.github.com/Sage/jsurl/

Yo no lo he probado muy a fondo todavía. Sin embargo, aquí es un ejemplo que muestra el carácter de las longitudes de la cadena de salida después de la codificación con el mismo tamaño de objeto utilizando 3 métodos diferentes:

  • 2651 caracteres usando jQuery.param
  • 1691 caracteres usando JSON.stringify + encodeURIComponent
  • 821 caracteres usando JSURL.stringify

claramente JSURL tiene la mayoría de formato optimizado para urlEncoding un objeto js.

el hilo en https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q muestra puntos de referencia para la codificación y análisis.

Nota: Después de las pruebas, parece que jsurl.js la biblioteca utiliza ECMAScript 5 funciones como Objeto.claves de la Matriz.mapa, y la Matriz.el filtro. Por lo tanto, sólo funciona en los navegadores modernos (no ie 8 y bajo). Sin embargo, son polyfills para estas funciones, que sería compatible con más navegadores.

3voto

genesis Puntos 32591

Utilizando encodeURIComponent() :

var url = 'index.php?data='+encodeURIComponent(JSON.stringify({"json":[{"j":"son"}]})),

1voto

foxybagga Puntos 1345

Respuesta dada por Delan es perfecto. Añadiendo-en caso de que alguien quiere nombrar los parámetros o pasar varias cadenas JSON por separado - el debajo de código puede ayudar!

JQuery

var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4));

data = {elements:JSON.stringify(valuesToPass)}

PHP

json_decode(urldecode($_POST('elements')));

Espero que esto ayude!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X