Foros del Web » Programando para Internet » Javascript »

Error al usar JSON.parse

Estas en el tema de Error al usar JSON.parse en el foro de Javascript en Foros del Web. Hola señores Hasta hace poco conocí el JSON.parse. Antes que eso usaba eval para parsear los datos devueltos por AJAX. Para recibir los datos en ...
  #1 (permalink)  
Antiguo 06/01/2012, 20:26
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Error al usar JSON.parse

Hola señores

Hasta hace poco conocí el JSON.parse. Antes que eso usaba eval para parsear los datos devueltos por AJAX. Para recibir los datos en mis pruebas estoy usando la siguiente función:

Código HTML:
function xAJAX (app,rqs,fnt,isString)
{
        var xh = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    		
    	xh.open ('POST',app,true);
    	xh.setRequestHeader ('Content-type','application/x-www-form-urlencoded');
    	xh.onreadystatechange = function ()
    	{ 
    		if(xh.readyState == 4 && xh.status == 200) fnt( JSON.parse(xh.responseText) );
    	};
    	
    	xh.send (rqs);
};
El caso es que cuando lo pruebo recibo el siguiente error en la consola de Chrome:

Código HTML:
Uncaught SyntaxError: Unexpected token '
xh.onreadystatechange
No entiendo qué puede estar sucediendo. Alguna sugerencia, idea o enlace que pueda leer para solucionar ese error.
__________________
JuniHH
- Mi blog
- Mi portafolio

Última edición por junihh; 06/01/2012 a las 20:46
  #2 (permalink)  
Antiguo 07/01/2012, 00:50
Avatar de Dnielf  
Fecha de Ingreso: diciembre-2008
Ubicación: 127.0.0.1
Mensajes: 72
Antigüedad: 15 años, 4 meses
Puntos: 14
Respuesta: Error al usar JSON.parse

Sería bueno si postearas el resultado xh.responseText, en todo caso prueba con:

Código Javascript:
Ver original
  1. JSON.parse(JSON.stringify(xh.responseText));
__________________
"Si aprender quieres, librerías usar no debes"
  #3 (permalink)  
Antiguo 07/01/2012, 06:57
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Error al usar JSON.parse

Disculpa haber escrito la función incompleta, pero con los tantos cambios que le hice tratando de encontrar el problema, terminé quitando muchas cosas. Esta es la función completa:

Código HTML:
function xAJAX (app,rqs,fnt,isString)
{
        var xh = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    		
    	xh.open ('POST',app,true);
    	xh.setRequestHeader ('Content-type','application/x-www-form-urlencoded');
    	xh.onreadystatechange = function ()
    	{ 
    		if (xh.readyState == 4 && xh.status == 200) 
    		{
    			if (isString)
    			{
    				fnt( JSON.stringify(xh.responseText) );
    			} else {
    				fnt( JSON.parse(xh.responseText) );
    			};
    		};
    	};
    	
    	xh.send (rqs);
};
El parámetro isString es un booleano para decir a la función que me devuelva un texto o un objeto. Lo aplico así:

Código HTML:
xAJAX ('usuarios.php','usuario=67890',function(resp)
{
        console.log( resp );
},false);

// Para devolver un objeto
Código HTML:
xAJAX ('usuarios.php','usuario=67890',function(resp)
{
        console.log( resp ); // = "Junior Hernandez"
},true);

// Para devolver texto
El caso es que el texto lo devuelve bien, pero para el objeto recibo esto: Ver imagen acá.

No se qué más hacer. ¿Alguna sugerencia?
__________________
JuniHH
- Mi blog
- Mi portafolio
  #4 (permalink)  
Antiguo 07/01/2012, 07:15
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Error al usar JSON.parse

Solución encontrada. Seguí buscando y encontré esta herramienta online al que pegué la respuesta tal como hago que se imprima de mi PHP.

Esto es lo que devolvía el PHP inicialmente:

Código PHP:
"{ 'status':'respuesta_objeto', 'nombre':'Junior', 'apellido':'Hernandez', 'email':'[email protected]' }" 
Me vi forzado a reemplazar las comillas simples por doble comillas:

Código PHP:
'{ "status":"respuesta_objeto", "nombre":"Junior", "apellido":"Hernandez", "email":"[email protected]" }' 
Con eso se solucionó el problema. Muchas gracias.
__________________
JuniHH
- Mi blog
- Mi portafolio

Última edición por junihh; 07/01/2012 a las 08:10
  #5 (permalink)  
Antiguo 07/01/2012, 21:20
Avatar de alejandromg  
Fecha de Ingreso: noviembre-2011
Ubicación: Tegucigalpa, HN
Mensajes: 35
Antigüedad: 12 años, 5 meses
Puntos: 15
Respuesta: Error al usar JSON.parse

Ten cuidado al hacer JSON.parse ya que cuando quieras convertir, "stringify" o trabajar con el debe ser estrictamente de estilo JSON, en ese caso el uso de comillas simples no son permitidas, me imagino que el JSON tú lo estas generando así que asegurate siempre de que sea válido en ese caso usa: http://jsonlint.com/

Saludos
__________________
¿Te gusto mi comentario? +1 ;)

Alejandro Morales. La mejor forma de contactarme :: via twitter @_alejandromg
CTO at numbus
  #6 (permalink)  
Antiguo 07/01/2012, 21:29
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Error al usar JSON.parse

Cita:
Iniciado por alejandromg Ver Mensaje
Ten cuidado al hacer JSON.parse ya que cuando quieras convertir, "stringify" o trabajar con el debe ser estrictamente de estilo JSON, en ese caso el uso de comillas simples no son permitidas, me imagino que el JSON tú lo estas generando así que asegurate siempre de que sea válido en ese caso usa: http://jsonlint.com/
Gracias por tu sugerencia y el enlace alejandromg, lo aprecio mucho. Admito que JSON es un tema que recién comienzo a aplicar en mis proyectos, por lo que hay cosas que me confunden. Tendré cuidado sobre las comillas.
__________________
JuniHH
- Mi blog
- Mi portafolio

Etiquetas: ajax, js, usar
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 18:46.