Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Error utilizando JSON con el método $.get()

Estas en el tema de Error utilizando JSON con el método $.get() en el foro de Frameworks JS en Foros del Web. Hola muy buenas. Tengo un código JS que manda mediante el método $.get() de JQuery un dato a un archivo PHP en el servidor. Código ...
  #1 (permalink)  
Antiguo 20/01/2012, 07:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 35
Antigüedad: 14 años, 10 meses
Puntos: 1
Error utilizando JSON con el método $.get()

Hola muy buenas.
Tengo un código JS que manda mediante el método $.get() de JQuery un dato a un archivo PHP en el servidor.
Código JS en el lado del cliente:

$.get("http://localhost/archivo.php",
{Dato: "Hola mundo!"},
muestramensaje);

function muestramensaje(respuesta){
alert("Mensaje:" + respuesta.mensaje);

Y en el archivo PHP lo único que hago es devolver el dato como JSON
Código PHP en el servidor:

<?php
echo json_encode(array("mensaje"=>$_GET["Dato"]));
?>

Una vez terminada la llegada de la respuesta ejecuto la función –muestramensaje.
El problema que tengo es que esta función no se ejecuta cuando en el método $.get() le especifico que el tipo de dato a recibir será JSON, en cambio sí elimino este parámetro del método si se ejecuta la función (aunque evidentemente me dice que el dato que le paso esta sin definir).
Me imagino que si no se ejecuta la función será porque hay un error en alguna parte de la petición/respuesta debido a algo relacionado con JSON.
  #2 (permalink)  
Antiguo 20/01/2012, 10:20
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error utilizando JSON con el método $.get()

tienes varios errores:

1 - evita usar localhost, porque no funcionará cuando lo subas a un hosting, usa una ruta relativa

2 - puedes usar $.ajax que si es más flexible en cuanto la data esperada, puede recibir un json
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 20/01/2012, 11:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 35
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Error utilizando JSON con el método $.get()

Con $.ajax me pasa exactamente lo mismo
Con este códgio me funciona a la perfección:

Código:
$.ajax({
url: "http://localhost/archivo.php",
type: 'GET',
data: 'Dato=Hola mundo!',
success: muestramensaje,
});
Y el servidor me envia como respuesta el código HTML (que es como por defecto está configurado el método $.ajax si no le indicas otro tipo).
Pero si le indico el parametro de lo que se espera como resultado:

Código:
dataType: 'json',
Con esto ya no se ejecuta la función muestramensaje.
Por lo tanto me da el mismo fallo que con $.get.

Respecto a localhost no puedo trabajar sin el por que la página está en constante comunicación con una base de datos y demas, evidentemente cuando subo las páginas al hosting retoco los enlaces para que sean relativos.
  #4 (permalink)  
Antiguo 20/01/2012, 12:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Error utilizando JSON con el método $.get()

buenas,
voy a meter la cuchara en el plato aunque mi ignorancia en jquery es casi absoluta. ¿no será que el content-type de la respuesta no es application/json? es decir, php por defecto devuelve como content-type text/html. supongo que al indicarle el dataType, jquery revisa el content-type de la petición.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 20/01/2012, 14:15
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error utilizando JSON con el método $.get()

Cita:
Iniciado por zerokilled Ver Mensaje
buenas,
voy a meter la cuchara en el plato aunque mi ignorancia en jquery es casi absoluta. ¿no será que el content-type de la respuesta no es application/json? es decir, php por defecto devuelve como content-type text/html. supongo que al indicarle el dataType, jquery revisa el content-type de la petición.
tienes toda la razón, ése puede ser el problema, aunque en otros FW como ExtJS no se preocupan por ello.

puede deberse también a que:

el JSON esté mal formado, debe evaluar exactamente que devuelve el server, con firebug puede ser

caracteres invisibles, puede que tenga ciertos espacios de línea al final, cosa que puede evitarse al eliminar el tag de cierre de php (?>), o según sea el caso con un simple exit;

caché: al usar el método get la respuesta esté cacheada y si tuvo algún error no podrá ver los cambios hasta borrarla manualmente en el navegador, luego expire la caché desde headers en php o use la técnica del parámetro fantasma
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #6 (permalink)  
Antiguo 20/01/2012, 17:30
 
Fecha de Ingreso: mayo-2009
Mensajes: 35
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Error utilizando JSON con el método $.get()

Hola de nuevo.
Pues en un primer momento no tenía ni idea de que era lo de content-type, y me he puesto a investigar y bien, he visto que por defecto el php que tengo instalado en el servidor el content-type es text/html, también he visto que el archivo PHP que tengo en el servidor y del cual espero la respuesta tiene la siguiente etiqueta

Código:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
he probado a modificar esta etiqueta poniendo la siguiente.
Código:
<meta http-equiv="Content-Type" content="application/json; charset=utf-8" />
Tampoco me funciona no sé si lo habré puesto bien, o si hay que modificar en otro lugar lo de la opción de content-type, si es así pues me gustaría que me lo explicasen.

El firebug lo tengo instalado, pero no tengo ni idea de como puedo evaluar la respuesta del servidor.
  #7 (permalink)  
Antiguo 20/01/2012, 17:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Error utilizando JSON con el método $.get()

hay algo curioso ahí. si tu php debe devolver como respuesta un json, entonces no debe generar contenido html. de lo contrario, un script que espere como respuesta un json no sabría como interpretarlo porque el contenido no conforma la sintaxis javascript. por tanto, el elemento meta no debes utilizarlo en ese caso. para tu indicar desde php el tipo de contenido tienes que usar la función header indicando el header http que quieres crear. en tu caso sería algo como header('Content-Type: application/json; charset=utf-8'). dicha función debes invocarla antes de generar cualquier salida.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 20/01/2012, 18:27
 
Fecha de Ingreso: mayo-2009
Mensajes: 35
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Error utilizando JSON con el método $.get()

Parece que hemos avanzado algo, he eliminado la etiqueta meta y en su lugar he puesto el código que me has detallado, el archivo PHP que tengo en el servidor me queda así.

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php header('Content-Type: application/json; charset=utf-8');?>
<head>
<title>Servidor</title>
</head>

<body>
<?php
echo json_encode(array("mensaje"=>$_GET["Dato"]));
?>
</body>
</html> 
Antes con la etiqueta meta, si acaso leia algo de la respuesta del servidor era un archivo el texto html, pero ahora con esta modificación ya no me envía el texto html. Pero sigue sin madarme la respuesta JSON.

Pongo de nuevo el código del scrip ya que he podido modificar algo y lo mismo tengo ahora un error pero no creo.

Código:
$.ajax({
			url: 'http://localhost/Mensaje.php',
			type: 'GET',
			data: 'Dato=Hola mundo!',
			dataType: 'json',
			success:muestramensaje,
});
			
			function muestramensaje(respuesta){
   alert("Mensaje:" + respuesta.mensaje);
   
}
  #9 (permalink)  
Antiguo 20/01/2012, 19:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Error utilizando JSON con el método $.get()

vuelvo a indicarte que si vas a generar un json en php y en jquery le indicas que el datatype es json, entonces el contenido generado no puede tener ningún html. a modo de ejemplo, el siguiente script php devuelve un json.
Código:
<?php
# json.php
header('Content-Type: application/json');
echo json_encode($_GET);
?>
fíjate que en el código no hay nada de html. lo que hace es convertir a json el array $_GET. de modo que cualquier parámetro que le envias lo convierte en json y eso es lo que le devuelve a cualquier petición. por ejemplo, json.php?msg=un+mensaje+cualquiera&numero=0&bool=t rue genera el siguiente contenido.
Código:
{
"msg": "un mensaje cualquiera",
"numero": "0",
"bool": "true"
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 21/01/2012, 03:54
 
Fecha de Ingreso: mayo-2009
Mensajes: 35
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Error utilizando JSON con el método $.get()

SOLUCIONADO!!, muchísimas gracias zerokilled, siento no habertelo entendido a la primera, me han servido de mucho tus respuestas.

Saludos: arriba:

Etiquetas: js, 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 17:35.