JQuery - Problema con json_encode o con parseJSON

 
Vista:
sin imagen de perfil

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 04/12/2015 13:57:48
Buenas!!!

Antes de nada... soy nueva y ando muy perdida... pero espero gracias a vuestra ayuda poder aprender mucho y dentro de poco ser yo quien pueda ayudar al resto de programadores. :)

Estoy desarrollando una aplicación que en el futuro tiene que crecer mucho y me encuentro con un problema nada más llevando unas pocas lineas de codigo.
No logro encontrar pq no funciona. Dentro del codigo index.html tengo marcadas con comentarios las zonas por donde pasa y por donde no consigue pasar.
El problema lo debe de estar dando el json_encode en funciones.php o el parseJSON en el index.php... el error que genera es: Uncaught SyntaxError: Unexpected token o

Muchas gracias!!!!

Este es del index.html:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html>
	<head>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
	</head>
	<body>
		<div id="contenido">
			<form id="form" class="form">
				<select name="name" id="name" >
					<option name="name" value="">Name</option>
					<script>
						$(document).ready(function(){
							alert("Entra en el ready");
							$("#name").click(function(){
								 alert("entra");
									$.ajax({
										url: "funciones.php",
										type: "post",
										cmd: "query_n",
										success: function(d) {
											alert("aqui tambien entra");
											var resu =$.parseJSON(a);
											alert("Por aqui ya no pasa...");
											$.each(resu , function( index, obj ) {
												document.getElementById('name').innerHTML +='<option value="'+obj+'" selected="selected">'+obj+'</option>';
											});
										}
									});
							});
						});
					</script>
				</select>
			</form>
		</div><!--contenido-->
	</body>
</html>



Este es el funciones.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
header("Content-Type: text/json");
 
function utf8json($inArray) {
   $newArray = array();
   foreach($inArray as $key=>$val) {
       if(is_array($val)) {
           $newArray[$key] = utf8json($val);
		} else {
           $newArray[$key] = utf8_encode($val);
		}
    }
   return $newArray;
}
 
if(isset($_POST['cmd'])){
	if($_POST['cmd'] == "query_n"){
		$mensaje = array("0");
		conectate($mensaje);
	}
}
 
function conectate($m){
	echo ("entra a conectarse");
	$mysqli = new mysqli("localhost","xxx","xxx","xxx");
	if ($mysqli -> connect_errno) {
		die( "Failed to connect to MySQL: (" . $mysqli -> mysqli_connect_errno() . ") " . $mysqli -> mysqli_connect_error());
	}else{
		switch($m[0]){
			case 0:
				$rawdata = array();
				$sql="SELECT Name FROM datos ORDER BY Name";
				$result = $mysqli->query($sql);
				$i = 0;
				while($row = $result->fetch_array(MYSQLI_ASSOC)){
					$rawdata[$i] = $row;
					$i++;
					//print_r($row);
				}
				//TEST
				//print_r (json_encode($rawdata));
					echo (json_encode(utf8json($rawdata), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
			break;
		}//cierra el switch
	}//cierra el else
}//cierra la funcion
?>
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 xve
Val: 302
Oro
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Problema con json_encode o con parseJSON

Publicado por xve (673 intervenciones) el 04/12/2015 16:59:25
Hola, yo creo que si miras la consola de errores, en esta linea tienes un error:
1
var resu =$.parseJSON(a);

Que es la variable "a"¿? creo que no existe, por eso da error y se para el proceso.
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 04/12/2015 17:18:28
muchas gracias xve por contestar ;)

La verdad es que me equivoque al copiarlo aqui, en realidad en el codigo la variable no se llama "a", se llama "d" y es la que se supone que recibe ajax del php... no se si estará bien...

Gracias!!
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 xve
Val: 302
Oro
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

Problema con json_encode o con parseJSON

Publicado por xve (673 intervenciones) el 04/12/2015 19:13:32
Has revisado la consola de errores?? en Chrome es con F12
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
Imágen de perfil de Jordi

Problema con json_encode o con parseJSON

Publicado por Jordi (12 intervenciones) el 05/12/2015 22:45:09
El problema es que estás pasando tu variable "cmd" como atributo dentro del objeto ajax y da error. Los datos a pasar por ajax se pasan mediante el atributo "data".

Es decir, debería quedar algo así:

1
2
3
4
5
6
7
8
$.ajax({
	url: "funciones.php",
	type: "post",
	data: {
		cmd: "query_n"
	},
	success: ...
});
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 07/12/2015 09:28:58
Muchas gracias Jordi y xve!!

ya he corregido el codigo como de dijiste, pero lamentablemente sigue sin funcionar, no consigo que pase por la sentencia parseJson...
El error que retorna, siguiendo el consejo de xve es: Uncaught SyntaxError: Unexpected token o
El codigo del funciones.php no lo he cambiado y el del index ahora a quedado asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$(document).ready(function(){
       alert("Entra en el ready");
	$("#name").click(function(){
		$.ajax({
			url: "funciones.php",
			type: "post",
			data: {
				cmd: "query_n"
			},
			success: function(d) {
				alert("aqui tambien entra");
				var resu =$.parseJSON(d);//este es el que da el problema!!!
				alert("Aqui ya no entra...");
				$.each(resu , function( index, obj ) {
					document.getElementById('name').innerHTML +='<option value="'+obj+'" selected="selected">'+obj+'</option>';
				});
			}
		});
	});
});

Gracias!!!!
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 Jordi

Problema con json_encode o con parseJSON

Publicado por Jordi (12 intervenciones) el 07/12/2015 09:40:43
Buenas,

¿Has comprobado que en la parte server-side se termine enviando lo que realmente necesitas y que recibe lo que realmente necesitas? Yo probaría con las siguientes opciones:

1) Comprobar que la query que se realiza a base de datos es efectivamente la correcta y devuelve lo que tiene que devolver.
2) Comrpobar en el navegador (F12), en al pestaña "Red", que la petición es la correcta. Ahí puedes ver también la respuesta y si se está devolviendo lo que tiene que devolverse.
3) En caso de que se devuelva OK, es cosa de la parte cliente. A lo mejor se está devolviendo un formato de dato que no esperas.
4) Comprobar con un console.log(d) o alert(d) que al cliente le llega bien.
5) En caso de que la variable "d" del cliente esté totalmente ok, probar con la función JSON.parse(d, callback);
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 07/12/2015 10:07:02
Muchas gracias nuevamente!!

1) He comprobado que la respuesta del query sea correcta, concretamente con un print_r el codigo de funciones.php muestra por pantalla:
[
{
Name: "xxx"
},
{
Name: "yyyy"
},
{
Name: "zzz"
}
]
2,3) No se donde esta la pestana "Red", no la encuentro al pulsar F12... (sorry, soy demasiado novata...)
4) Al con alert(d) muestra: [object,Object],[object,Object],[object,Object]
5) probe con JSON.parse(d,callback) y sigue sin pasar por ahi...

*Probando con iE muestra el error:
SCRIPT1014: Ungültiges Zeichen (Caracter invalido en espayol)
Datei: jquery.min.js, Zeile: 4, Spalte: 5297 (Archivo: jquery.min.js, linea:4, columna:5297)

Gracias!!!!!
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 07/12/2015 10:16:57
Disculpa, funciones.php muestra:
[
{
Name: "xxx"
},
{
Name: "yyyy"
},
{
Name: "zzz"
}
]
con la sentencia echo (json_encode(utf8json($rawdata), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); no con un print_r
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 Jordi

Problema con json_encode o con parseJSON

Publicado por Jordi (12 intervenciones) el 07/12/2015 10:36:10
Si lo muestra entre corchetes es que se trata de un array de datos. Es decir:

[ json1 , json2 , json 3]

Y lo que tú estas intentando convertir a json es el conjunto de jsones, no cada uno de ellos, por lo que da error. Es decir, deberías, en el cliente, al recibir la respuesta ajax, convertir a json cada una de las posiciones del array. Es decir:

1
2
3
4
5
6
7
8
success: function(d) {
	$.each(d, function( item ) {
		// Por cada posición de la respuesta "d" (a la que llamaremos "item")...
		// La convertimos en JSON y luego imprimimos en el documento
		var obj = $.parseJSON(item);
		document.getElementById('name').innerHTML += '<option value="'+obj.Name +'" selected="selected">' + obj.Name + '</option>';
	});
}
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 07/12/2015 11:37:05
Muchisimas gracias, tienes toda la razon, ahora si pasa por el parseJson!!
Me queda solo solucionar el tema de obj.Name.. lamentablemente retorna los tres names como undefined... me pongo a ello!
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

Problema con json_encode o con parseJSON

Publicado por None (7 intervenciones) el 07/12/2015 13:59:08
Nada, no lo consigo... solo retorna undefined.
Alguna documentacion/manual/tutorial sobre como puedo acceder a los datos del obj? Tampoco quiero aprovecharme y que me den el trabajo hecho... alguna buena documentacion para aprender tambien me seria util.
De momento probe a hacer otro each y mostrar index, key y demás y no obtuve solucion...

Gracias!!!
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 Jordi

Problema con json_encode o con parseJSON

Publicado por Jordi (12 intervenciones) el 07/12/2015 14:11:01
Tienes la documentación del parseJson aquí: http://api.jquery.com/jquery.parsejson/
De todas formas, si estás utilizando jQuery, puedes acceder al DOM mediante selectores jQuery en vez de con getElementBy. En este caso, con $("#name").

¿Has probado con JSON.parse(item)? También puedes imprimir por console.log los JSON parseados que vas creando para ver si se hacen correctamente y así sabrás si el problema es del parse o del obj.Name. Recuerda que el PHP tiene que devolver los valores entre comillas para que javascript los interprete como string.
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