Pase la matriz Javascript -> PHP
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 .load
un 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;
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.
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.
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.