Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Envío y recepción de datos entre JS y PHP con AJAX y JSON

Estas en el tema de Envío y recepción de datos entre JS y PHP con AJAX y JSON en el foro de Jquery en Foros del Web. Buenas, hace unos días abrí un hilo para preguntar si se podía enviar y recibir datos entre JS y PHP y que fuera transparente para ...
  #1 (permalink)  
Antiguo 26/12/2013, 18:30
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Envío y recepción de datos entre JS y PHP con AJAX y JSON

Buenas, hace unos días abrí un hilo para preguntar si se podía enviar y recibir datos entre JS y PHP y que fuera transparente para el usuario. Me dijeron que sí, con AJAX y JSON, investigué un poco y encontré varios ejemplos que me valían. Pero ahora me he atascado y no sé que está fallando. Resumiendo, tengo una sección de comentarios que quiero que el usuario pueda editar o eliminar. El código es más o menos este:

Código Javascript:
Ver original
  1. $(".btn_eliminar").click(function() {
  2.     // Construyo un array con la información a enviar, por ejemplo sería algo así.
  3.     var parametros = {
  4.         "id" : 1,
  5.         "mensaje" : "Esto es un mensaje enviado desde JS"
  6.     };
  7.     // Paso a json
  8.     var datosJSON = JSON.stringify(parametros);
  9.  
  10.     $.ajax({
  11.         type: "POST",
  12.         data: datosJSON,
  13.         url: 'consulta.php',
  14.         success: function(data) {
  15.             var res = jQuery.parseJSON(data);
  16.             if (res.success == 1) {
  17.                 // Código en caso de éxito en la consulta
  18.             }
  19.             else {
  20.                 // Código en caso de fracaso en la consulta
  21.             }
  22.         },
  23.         error: function(e) { // Si no ha podido conectar con el servidor
  24.             // Código en caso de fracaso en el envío
  25.         }
  26.     });
  27. });

El archivo consulta.php simplemente debería recibir los datos por post, modificar la BD y devolver una respuesta. Más o menos sería:

Código PHP:
Ver original
  1. $json = json_decode($_POST["datosJSON"]);
  2.  
  3. // Operaciones con la BD en función de los datos recibidos
  4.  
  5. $respuesta = array (
  6.     "success" => 1,
  7.     "error" => 0,
  8.     "msg" => ""
  9. );
  10. echo json_encode($respuesta);

Pues algo está fallando y por más que reviso no sé lo que es. ¿Alguna idea?

Además, también me gustaría codificar los datos con md5 para evitar sniffers. Si pudiérais orientarme os lo agradecería, aunque mi principal objetivo es que lo primero funcione.

Gracias.

Edito, se me pasó comentar que el código funciona cuando cambio esto en la petición ajax.

Código Javascript:
Ver original
  1. data: {"id": 1, "mensaje": "Esto es un mensaje enviado desde JS"},

Y en el php puedo devolver:

Código PHP:
Ver original
  1. $respuesta = array (
  2.     "success" => 1,
  3.     "error" => 0,
  4.     "msg" => $_POST["mensaje"]
  5. );

Así que supongo que el problema está en la codificación a JSON en JS o en la decodificación en PHP.
  #2 (permalink)  
Antiguo 27/12/2013, 08:47
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 14 años, 9 meses
Puntos: 22
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

¿La variable $json devuelve algo o vuelve vacía?

Código PHP:
Ver original
  1. $json = json_decode($_POST["datosJSON"]);
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #3 (permalink)  
Antiguo 27/12/2013, 10:35
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

Pues es que no lo sé, no sé como "debuggear" esto. Si en el js pongo esto:

Código Javascript:
Ver original
  1. var parametros = {
  2.     "inicio" : 1,
  3.     "mensaje" : "Esto es un mensaje enviado desde JS"
  4. };
  5. var datosJSON = JSON.stringify(parametros);
  6.  
  7. $.ajax({
  8.     type: "POST",
  9.     data: datosJSON,
  10.     url: 'consulta.php',
  11.     success: function(data) {
  12.         var res = jQuery.parseJSON(data);
  13.         alert(res.msg);
  14.     },
  15.     error: function(e) {
  16.         alert("Error en el servidor");
  17.     }
  18. });

Y en consulta.php esto:
Código PHP:
Ver original
  1. $json = json_decode($_POST["datosJSON"]);
  2. $respuesta = array (
  3.     "success" => 0,
  4.     "error" => 4,
  5.     "msg" => "Error en la conexión con la base de datos."
  6. );
  7. echo json_encode($respuesta);

No se aparece ningún alert. Es como si hubiera un error en el JS y no se ejecutase. Pero he probado poniendo alerts justo antes de $.ajax y justo después y si se muestran, pero ninguno en caso de "success" o "error".
  #4 (permalink)  
Antiguo 27/12/2013, 13:28
Avatar de vick90  
Fecha de Ingreso: abril-2010
Mensajes: 144
Antigüedad: 14 años
Puntos: 14
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

Puedes poner un debugger para que vayas viendo que es lo que hace cada linea de codigo

Código Javascript:
Ver original
  1. $.ajax({
  2.     type: "POST",
  3.     data: datosJSON,
  4.     url: 'consulta.php',
  5.     success: function(data) {
  6.         debugger;
  7.         var res = jQuery.parseJSON(data);
  8.         alert(res.msg);
  9.     },
  10.     error: function(e) {
  11.         alert("Error en el servidor");
  12.     }
  13. });

Para que funcione el debugger tienes que tener abierto la consola de chrome o firefox
Saludos
  #5 (permalink)  
Antiguo 28/12/2013, 04:49
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

Gracias. Probaré a ver.
  #6 (permalink)  
Antiguo 28/12/2013, 06:41
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

He encontrado un error con la consola pero no soy capaz de solucionarlo. El envío con ajax en JS funciona bien, la página php recibe correctamente los datos. El error está en la decodificación en JS del json recibido del php.

La llamada, simplificada todo lo que he podido, queda:

Código Javascript:
Ver original
  1. var parametros = {
  2.     "idcomentario" : 114,
  3.     "iduser" : 1
  4. };
  5. $.ajax({
  6.     type: "POST",
  7.     data: parametros,
  8.     url: 'consulta.php',
  9.     success: function(data) {
  10.         var res = jQuery.parseJSON(data);
  11.         alert("success");
  12.     },
  13.     error: function(e) {
  14.         alert("error");
  15.     }
  16. });

consulta.php devuelve esto

Código PHP:
Ver original
  1. $respuesta = array (
  2.     "success" => 1,
  3.     "error" => 0,
  4.     "msg" => ""
  5. );
  6. echo json_encode($respuesta);

Y en la consola aparece el siguiente mensaje: "SyntaxError: JSON.parse: unexpected character". Busco el json recibido y aparece en la consola esto:
{"success":1,"error":0,"msg":""}

El JSON parece bien formado, pero he ido a http://jsonlint.com/ y lo da como no válido: "JSON.parse: unexpected character".

Y para acabar de romperme la cabeza, si en el navegador entro en consulta.php aparece:
{"success":1,"error":0,"msg":""}

Que es exactamente lo mismo que dice la consola que recibo de la llamada ajax. Voy otra vez a validarlo y me dice que el JSON es válido.

Que desesperación!! Si alguien me puede echar una mano le estaría muy agradecido porque ya no sé por donde buscar la solución.
  #7 (permalink)  
Antiguo 28/12/2013, 13:53
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Envío y recepción de datos entre JS y PHP con AJAX y JSON

Después de darle mil vueltas encontré el problema. La codificación. Cambié de UTF8 a UTF8 sin BOM y ya funciona.

Etiquetas: ajax, json, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:30.