AJAX - Problema para guardar salida Json/Ajax en variable PHP

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido su posición en 2 puestos en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por Mario Campos (4 intervenciones) el 11/12/2018 04:22:17
Estimados, tengo un problema, la respuesta json/ajax la puedo imprimir en el id de un span, pero no puedo guardar en una variable php esa respuesta. Cómo almaceno cada elemento del json en una variable php?

El formulario:
1
2
3
4
5
6
7
8
9
10
<form id="form">
<input type="text" id="nombre" placeholder="Nombre" >
<input type="text" id="apellido" placeholder="Apellido" >
<input type="number" id="edad" placeholder="Edad" >
<input type="submit" name="enviar" id="enviar" value="Enviar">
</form>
<hr>
<p>Name: <span id="myName"></span></p>
<p>Apellido: <span id="myApellido"></span></p>
<p>Edad: <span id="myEdad"></span></p>

Llamada Ajax
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script type="text/javascript">
$("#enviar").click(function(e) {
	e.preventDefault();
	var nombre = $("#nombre").val(),
	apellido = $("#apellido").val(),
	edad = $("#edad").val(),
 
	//"nombre del parámetro POST":valor (el cual es el objeto guardado en las variables de arriba)
	datos = {"nombre":nombre, "apellido":apellido,"edad":edad};
 
	$.ajax({
		url: "procesa.php",
		type: "POST",
		dataType: 'json',
		data: datos
	}).done(function(respuesta){
		if (respuesta.estado === "ok") {
			 $('#myName').text(respuesta.nombre);
                         $('#myApellido').text(respuesta.apellido);
                         $('#myEdad').text(respuesta.edad);
		}
	});
});
</script>

El archivo procesa.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//Obtenemos los datos de los input
$nombre = $_POST["nombre"];
$apellido = $_POST["apellido"];
$edad = $_POST["edad"];
 
//Hacemos las comprobaciones que sean necesarias... (sanitizar los textos para evitar XSS e inyecciones de código, comprobar que la edad sea un número, etc.)
//Omitido para la brevededad del código
//PERO NO OLVIDES QUE ES ALGO IMPORTANTE.
 
//Seteamos el header de "content-type" como "JSON" para que jQuery lo reconozca como tal
header('Content-Type: application/json');
//Guardamos los datos en un array
$datos = array(
'estado' => 'ok',
'nombre' => $nombre,
'apellido' => $apellido,
'edad' => $edad
);
//Devolvemos el array pasado a JSON como objeto
echo json_encode($datos, JSON_FORCE_OBJECT);
?>

El sistema funciona perfecto, publicando las respuestas en el id de los span que están bajo el form. Pero lo que quiero es guardar cada cada valor de la clave json en una variable php. He probado lo siguiente pero no funciona.
1
2
]echo $_POST["nombre"]; //Tomando el nombre de la key nombre del json. No funciona.
echo $_POST["myName"]; //El id de la respuesta. No funciona.
Dónde está mi error?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abzer0x
Val: 72
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por abzer0x (3 intervenciones) el 12/12/2018 00:26:11
Hola, si lo que quieres es acceder a los datos enviados a través de ajax en un formato json, puedes hacer lo siguiente:
1
2
3
4
5
6
<?php
$data = json_decode(file_get_contents('php://input'), true);
$nombre = $data[0];
$apellido = $data[1];
$edad = $data[2];
//....

En este caso utilizo el protocolo php, junto con input, el cual es un flujo de solo lectura. El motivo es que php://input devuelve todos los datos sin procesar después de los encabezados HTTP de la solicitud, independientemente del tipo de contenido. Es decir, lo que es el payload del request.
A diferencia de $_POST, el cual solo soporta dos tipos de contenido application/x-www-form-urlencoded y multipart/form-data-encoded.

http://php.net/manual/es/wrappers.php.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 2 puestos en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por Mario Campos (4 intervenciones) el 12/12/2018 00:52:25
Estimado,
Muchas gracias por tu apoyo.
He puesto el código debajo del form, y no me funciona, Dónde debo ponerlo?
Otra cosa que no veo la respuesta json del ajax
1
2
3
4
5
6
7
8
$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
$nombre = $data[0];
$apellido = $data[1];
$edad = $data[2];
echo "Nombre: " . $nombre;
echo "Apellido: " . $Apellido;
echo "Edad: " . $edad;
, y tal vez por eso no me muestra nada en la respuesta.
1
2
//De la respuesta de json
.done(function(respuesta){
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzer0x
Val: 72
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por abzer0x (3 intervenciones) el 12/12/2018 20:46:30
Este código iría en procesa.php al incio de éste. En lugar de tomar los valores de la variable $_POST utilizas este código. La respuesta que estas enviando esta bien solo cambia la forma de recibir los datos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$data = json_decode(file_get_contents('php://input'), true);
$nombre = $data[0];
$apellido = $data[1];
$edad = $data[2];
//...
//Seteamos el header de "content-type" como "JSON" para que jQuery lo reconozca como tal
header('Content-Type: application/json');
//Guardamos los datos en un array
$datos = array(
'estado' => 'ok',
'nombre' => $nombre,
'apellido' => $apellido,
'edad' => $edad
);
//Devolvemos el array pasado a JSON como objeto
echo json_encode($datos, JSON_FORCE_OBJECT);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 2 puestos en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por Mario Campos (4 intervenciones) el 13/12/2018 03:31:52
Estimado, lo hice conforme tu propuesta, pero ahora los id de los span me salen como null y aunque no no importan las respuestas en el id, aún no se muestran las variables recibidas. Posteriormente agregué esto dentro de la respuesta ok del json en el ajax:
1
var mynombre =  respuesta.nombre;

Y debajo del form, puse:
1
2
3
4
5
<?php
echo "Nombre: " . $mynombre;
echo $_POST["nombre"];
echo $_POST["respuesta.nombre"];
?>

Siempre tengo null de respuesta en los id y no se muestran las variables en php. La consola no arroja ningún error.
Alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzer0x
Val: 72
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por abzer0x (3 intervenciones) el 13/12/2018 10:30:54
Probaste ver que devuelve el objeto respuesta imprimiendo por consola:
1
console.log(respuesta)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha disminuido su posición en 2 puestos en AJAX (en relación al último mes)
Gráfica de AJAX

Problema para guardar salida Json/Ajax en variable PHP

Publicado por Mario (4 intervenciones) el 13/12/2018 17:36:49
En la consola me sale:
1
2
3
4
{nombre: null, apellido: null}
apellido: null
nombre: null
__proto__: Object
Le quité edad y estado para simplificar el código. Solo dejé nombre y apellido.
Ver imagen.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar