Tengo una aplicación web interactiva impulsada por jQuery donde los usuarios pueden manipular objetos visuales en la pantalla. Cuando termine, el "estado" de los objetos JavaScript se debe enviar a PHP para almacenarlos en la base de datos. Prefiero usar GET para esto, pero la solución que usa POST para enviar los datos también es viable.

Actualmente estoy pensando en serializar todos los objetos JS usando algo como la codificación base64 y simplemente usar algo como:

var str = encode_objects();
document.location = 'result.php?result='+str;

Sin embargo, algo me dice que tiene que haber una forma más elegante que escribir mi propia función de codificación base64 en JavaScript. ¿No hay algo ya incorporado en JavaScript que pueda hacer el trabajo?

Actualización: la decodificación en PHP no es el problema. Sé cómo decodificar base64, JSON, lo que sea en PHP. El problema es cómo codificar datos en el lado de JavaScript.

AJAX está fuera de la cuestión. Tiene que ser un GET o POST limpio con la recarga de la página.

2
Milan Babuškov 21 jul. 2009 a las 01:28

6 respuestas

La mejor respuesta

json_decode () debería servirle bien aquí.

Si simplemente agrega una cadena que contiene la representación JSON de su objeto javascript a su solicitud HTTP, puede json_decode () en PHP y tener un objeto PHP listo para funcionar.

Editar: debo mencionar que esta página tiene un enlace a un stringifier JSON Javascript, que se convertirá sus objetos JS en el JSON necesario.

7
zombat 20 jul. 2009 a las 21:41

GET o POST probablemente dependerá del tamaño de sus datos: hay un límite en la cantidad de datos que puede pasar a través de GET (algo así como 2000 bytes; más, dependiendo del navegador).

También hay otra cosa a tener en cuenta: si está modificando datos, debe usar POST; no GET, que se usa para ... obtener ... datos.

Sobre el formato, realmente no elegiría nada como una función personalizada que haga cualquier tipo de cosas como base64: definitivamente elegiría JSON, que es una notación nativa de Javascript.

Por ejemplo, puedes echar un vistazo a:

Hay muchas bibliotecas JS que pueden generar JSON (probablemente todas las JS Framework pueden; y hay bibliotecas independientes como esta); y desde PHP 5.2 hay funciones en PHP para codificarlo / decodificarlo (vea json_encode y json_decode)

1
Pascal MARTIN 20 jul. 2009 a las 21:38

He usado Jquery / JSON.

var jsonArray = $.toJSON(jsArray);

Luego la envió a través de JQuery / Ajax

0
Ahmet Kakıcı 20 jul. 2009 a las 21:38

En primer lugar, si está actualizando el estado de los objetos, debería ser una POST. intenta mantener todo tu GET idempotente.

Segundo, incluso si no quieres hacer ningún AJAX, JSON sigue siendo tu amigo. la forma más fácil sería serializar sus objetos en JSON y enviar la cadena resultante en la carga de datos POST. Hay muchas formas de decodificar JSON en PHP, y ya está todo listo.

3
Javier 20 jul. 2009 a las 21:33

Si se trata simplemente de una matriz plana simple, no necesita hacer nada elegante, ya que PHP tiene una función integrada en analizar la sintaxis de la matriz de los nombres de variables GET / POST. Ejemplo aproximado a continuación.

Lado Javascript:

// Do the parameter-building however you want, I picked the short/messy way
var arrayvalues = [1, 2, 'a'];
var querystring = "var[]=" + arrayvalues.join("&var[]=");
querystring += "&var[something]=abcdef";
// querystring is now "var[]=1&var[]=2&var[]=a&var[something]=abcdef"

Lado PHP:

var_dump($_POST);
// Remember to validate the data properly!
if ( is_array($_POST['var']) ) {
    count($_POST['var']);
    echo $_POST['var']['something'];
    array_map('do_something_interesting', $_POST['var']);
}
1
Josh 13 nov. 2011 a las 14:09

Puede usar esta función de serialización y luego deserializarla en el extremo de PHP.

2
jimyi 20 jul. 2009 a las 21:35