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, .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-200 veces.
array[i] = variable;
Puede usar JSON.stringify(array) para codificar su matriz en JavaScript y luego usar $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 elemento <form> . Lo que significa que puede 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, en el 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, estoy uniendo los elementos con comas aquí. 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 que se enviará 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('&'); }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]=fourlo que le permitirá usar $_GET['a'] como una matriz en script.php. Deberá encontrar su camino hacia su motor ajax favorito al proporcionar la URL para llamar a script.php desde js.