Pase la matriz Javascript -> PHP

Resuelto switz asked hace 54 años • 5 respuestas

Digamos que tengo una matriz de JavaScript con un montón de elementos (entre 50 y 200).

Quiero enviar eso a PHP (declaración preparada) usando ajax. Actualmente, tengo .loadun archivo php muchas veces dentro de un bucle, pero quiero convertirlo en una matriz y enviar la matriz una vez, cargando el archivo PHP una vez en lugar de 50 a 200 veces.

array[i] = variable;

switz avatar Jan 01 '70 08:01 switz
Aceptado

Puede usarlo JSON.stringify(array)para codificar su matriz en JavaScript y luego usarlo $array=json_decode($_POST['jsondata']);en su script PHP para recuperarlo.

Gareth avatar Feb 17 '2011 23:02 Gareth

Las solicitudes AJAX no son diferentes de las solicitudes GET y POST iniciadas a través de un <form>elemento. Lo que significa que puedes usar $_GET y $_POST para recuperar los datos.

Cuando realiza una solicitud AJAX (ejemplo de jQuery):

// JavaScript file

elements = [1, 2, 9, 15].join(',')
$.post('/test.php', {elements: elements})

Es (casi) equivalente a publicar este formulario:

<form action="/test.php" method="post">
  <input type="text" name="elements" value="1,2,9,15">
</form>

En ambos casos, del lado del servidor puedes leer los datos de la variable $_POST:

// test.php file

$elements = $_POST['elements'];
$elements = explode(',', $elements);

En aras de la simplicidad, uniré los elementos aquí con coma. Sin embargo, la serialización JSON es una solución más universal.

Alexey Lebedev avatar Feb 18 '2011 12:02 Alexey Lebedev

Aquí hay una función para convertir una matriz u objeto js en una matriz compatible con php para enviarla como parámetro de solicitud de obtención http:

function obj2url(prefix, obj) {
        var args=new Array();
        if(typeof(obj) == 'object'){
            for(var i in obj)
                args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]);
        }
        else
            args[args.length]=prefix+'='+encodeURIComponent(obj);
        return args.join('&');
    }

El prefijo es un nombre de parámetro.

EDITAR:

var a = {
    one: two,
    three: four
};

alert('/script.php?'+obj2url('a', a)); 

Producirá

/script.php?a[one]=two&a[three]=four

lo que le permitirá usar $_GET['a'] como una matriz en script.php. Deberá encontrar su camino hacia su motor ajax favorito para proporcionar la URL para llamar a script.php desde js.

Dennis Kreminsky avatar Feb 17 '2011 22:02 Dennis Kreminsky