Enviar un arreglo de JavaScript a PHP a través de AJAX

Resuelto
abirgl Mensajes publicados 147 Estado Miembro -  
Pitet Mensajes publicados 2845 Estado Miembro -
Bonjour,
Necesito pasar un array de JavaScript a PHP, para ello intenté usar AJAX, pero me aparece un mensaje de error "Indice indefinido: tab en ...", aquí está el código de mi archivo testajax7.php:

<script type="text/javascript">
var tab=['a','b','c','d'];
</script>
<script type="text/javascript">
$.ajax({
type: "POST",
url: "testajax7.php",
data: { tab : tab},
success: function() {
alert("Éxito");
}
});
</script>

<?php
$myTable = $_POST['tab'];
print_r($myTable);
?>

He puesto testajax7.php en url: de la función AJAX porque necesito el array en la misma página (todo el procesamiento se hace en la misma página)
Por favor, ¿cómo puedo modificar este código para poder recuperar el array en PHP?
Gracias de antemano

Configuración: Windows / Chrome 55.0.2883.87

1 respuesta

Pitet Mensajes publicados 2845 Estado Miembro 530
 
Hola,

Tu código funciona, pero en la primera carga de la página, la variable $_POST['tab'] aún no existe (se crea después por la solicitud AJAX), de ahí el mensaje de error.
Es necesario verificar la existencia de esta variable con isset o empty.

Aprovecho para mencionar:
- en HTML5, ya no es necesario especificar el atributo type para el código JS en las etiquetas script
- no es necesario abrir y cerrar las etiquetas script si no hay nada entre ellas
- puedes apuntar a la página actual usando el símbolo #

Ejemplo de corrección:
 <?php if (isset($_POST['tab'])) { $myTable = $_POST['tab']; print_r($myTable); } else { ?> <script> var tab=['a','b','c','d']; $.ajax({ type: "POST", url: "#", data: { tab : tab}, success: function(data) { alert(data); } }); </script> <?php } ?> 


Que tengas un buen día,
0
abirgl Mensajes publicados 147 Estado Miembro 1
 
Hola Pitet,
gracias por los comentarios ^^,
he probado el código que publicaste pero no mostró nada, presioné f12 para ver lo que se muestra en la consola y encontré el error: "Uncaught ReferenceError: $ is not defined at ..."
:(
0
Pitet Mensajes publicados 2845 Estado Miembro 530
 
Sí, la función $.ajax es parte de jQuery.
Dado que no lo habías especificado en tu primer código, pensé que ya lo habías incluido.
De lo contrario:
 <?php if (isset($_POST['tab'])) { $myTable = $_POST['tab']; print_r($myTable); } else { ?> <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script> var tab=['a','b','c','d']; $.ajax({ type: "POST", url: "#", data: { tab : tab}, success: function(data) { alert(data); } }); </script> <?php } ?> 

PS: sin el
"quot;
0
abirgl Mensajes publicados 147 Estado Miembro 1 > Pitet Mensajes publicados 2845 Estado Miembro
 
Merci beaucoup Pitet, se muestra la tabla en una alerta, pero para el tratamiento que voy a hacer en PHP, necesito un array PHP. Intenté usar Ajax para almacenar el contenido de la tabla JavaScript en un array PHP, ¿es posible? ¿Y cómo se hace, por favor? Muchas gracias.
0
Pitet Mensajes publicados 2845 Estado Miembro 530
 
¿Y la tabla $_POST['tab'] entonces?
La tabla mostrada en la alerta proviene de la visualización de la tabla php. Si no necesitas recuperar el resultado de tu tratamiento php a través de javascript, entonces la solicitud ajax es innecesaria y podrías simplemente usar un formulario.
0
abirgl Mensajes publicados 147 Estado Miembro 1
 
Hola Pitet,
Creo que no expliqué bien mi necesidad, intentaré volver a explicar:
Tengo un array de javascript (no es el resultado de un procesamiento en php, es un simple array de javascript)

var tab=['a','b','c','d'];

Ahora, quiero usar este array para un procesamiento en php, no he encontrado cómo pasarlo de javascript a php, me han dicho que ajax es la solución, y aquí estoy intentando transmitir mi array de javascript a través de ajax para finalmente obtener un array en php,
el array que necesito en php debe ser así:
$tab=array('a','b','c','d');
¿Es posible hacerlo con ajax o debo buscar otra forma de hacerlo?
PD: Todo el procesamiento debe llevarse a cabo en la misma página (en la url de la función ajax debe quedar #)
Muchas gracias por sus respuestas y esfuerzos.
0