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

Problemas para formatear cadena

Estas en el tema de Problemas para formatear cadena en el foro de Frameworks JS en Foros del Web. Hola a todos, tengo una cadena que obtengo desde un json que obtengo de una consulta a la base de datos. Esta cadena que formo, ...
  #1 (permalink)  
Antiguo 15/10/2014, 08:17
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 13 años, 10 meses
Puntos: 0
Problemas para formatear cadena

Hola a todos, tengo una cadena que obtengo desde un json que obtengo de una consulta a la base de datos. Esta cadena que formo, a partir del arreglo, la necesito para "pintar" una gráfica con la api de google chart. Hasta este punto todo bien. La cadena que formo es la sigiuente:

Código HTML:
Ver original
  1. ['Usuario', 'Participacines'],['usr1', 3],['usr2', 9],['usr3', 74],['usr4 ', 3],['usr5', 19],['usr6', 74],['usr7', 2],['usr8', 60],['usr9 ', 3]

y la inserto en la función de la api de google chart, pero me marca lo siguiente: "Data column(s) for axis #0 cannot be of type string×"

El código que utilizo es el siguiente:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.     $(document).ready(function(){
  4.  
  5.     });
  6.         var arrayJS=<?php echo $a->get_estadist_JS(); ?>;
  7.         var grafica = new Array();
  8.        
  9.         if(!arrayJS){
  10.           newTable = '<td><p>No hay datos disponibles</p></td>';
  11.         }else{
  12.           grafica += ("['Usuario', 'Participacines'],");
  13.           $.each(arrayJS, function(key, value){        
  14.             grafica += "['"+value["usuario"]+"', "+value["cuantos"]+"],"
  15.           });          
  16.         }
  17.         grafica = grafica.substr(0, grafica.length - 1);
  18.          
  19.       console.log(grafica);
  20.       google.load("visualization", "1", {packages:["corechart"]});
  21.       google.setOnLoadCallback(drawChart);
  22.      
  23.       function drawChart() {
  24.         var data = google.visualization.arrayToDataTable( [ grafica ] );
  25.  
  26.         var options = {
  27.           title: 'EDUC',
  28.           //vAxis: {title: 'Alumno',  titleTextStyle: {color: 'red'}}
  29.         };
  30.  
  31.         var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
  32.  
  33.         chart.draw(data, options);
  34.       }
  35.     </script>

Lo que no logro entender es, que si asigno una variable php con la cadena mencionada, y la asigno
Código:
var data = google.visualization.arrayToDataTable([ <?php echo $var ?> ]);
funciona a la perfección.

Alguien pudiera decirme qué estoy haciendo mal.

Gracias
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.
  #2 (permalink)  
Antiguo 15/10/2014, 11:34
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 7 años, 10 meses
Puntos: 182
Respuesta: Problemas para formatear cadena

Buenas,

Cita:
"Data column(s) for axis #0 cannot be of type string×"
El error parece bastante claro. El conjunto tiene que ser un array y tu le estas pasando un string.

https://developers.google.com/chart/...raytodatatable

Cuando haces esto:
grafica += ("['Usuario', 'Participacines'],");

Estás transformando el tipo de grafica de Array a String.

Para manipular arrays en Javascript:
http://www.w3schools.com/js/js_arrays.asp
http://www.w3schools.com/js/js_array_methods.asp


Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 15/10/2014 a las 11:41
  #3 (permalink)  
Antiguo 15/10/2014, 12:01
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Problemas para formatear cadena

Gracias Profesor_Falken, he estado tratando de convertir esa cadena en array sin éxito. Voy a revisar las ligas que mandas y te comento qué tal me fue.
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.
  #4 (permalink)  
Antiguo 15/10/2014, 12:39
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 7 años, 10 meses
Puntos: 182
Respuesta: Problemas para formatear cadena

Por si te da una pista, cuando lo generas desde PHP este es el resultado:

google.visualization.arrayToDataTable([ ['Usuario', 'Participacines'],['usr1', 3],['usr2', 9],['usr3', 74],['usr4 ', 3],['usr5', 19],['usr6', 74],['usr7', 2],['usr8', 60],['usr9 ', 3] ]);

Sin embargo desde Javascript estás haciendo esto:
google.visualization.arrayToDataTable([ "['Usuario', 'Participacines'],['usr1', 3],['usr2', 9],['usr3', 74],['usr4 ', 3],['usr5', 19],['usr6', 74],['usr7', 2],['usr8', 60],['usr9 ', 3]" ]);

Por eso el primero funciona y no el segundo.

Para ir construyendo el array en el bucle te será muy útil el método push()

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 15/10/2014, 18:11
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Problemas para formatear cadena

Ya usé push() pero al imprimirla con console.log me imprime lo siguiente:


["['Usuario', 'Participacines'],", "['usr1', 63],", "['usr 2', 3],", "['usr 3', 9],", "['usr 4', 107],", "['use 5', 3],", "['usr 6', 24],", "['usr 7', 3],", "['usr 8', 826],", "['usr 9', 2],"]


y de esta manera utilizo el push:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.         var arrayJS=<?php echo $a->get_estadist_JS(); ?>;
  4.         var grafica = new Array();
  5.  
  6.         grafica = [];
  7.        
  8.         if(!arrayJS){
  9.           newTable = '<td><p>No hay datos disponibles</p></td>';
  10.         }else{
  11.           grafica.push("['Usuario', 'Participacines'],");
  12.           $.each(arrayJS, function(key, value){        
  13.             grafica.push("['"+value["usuario"]+"', "+value["cuantos"]+"],")
  14.           });        
  15.         }
  16.          console.log(grafica);
  17.  
  18.       google.load("visualization", "1", {packages:["corechart"]});
  19.       google.setOnLoadCallback(drawChart);
  20.      
  21.       function drawChart() {
  22.         var data = google.visualization.arrayToDataTable( [ grafica ] );
  23.  
  24.         var options = {
  25.           title: 'EDUC',
  26.           //vAxis: {title: 'Alumno',  titleTextStyle: {color: 'red'}}
  27.         };
  28.  
  29.         var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
  30.  
  31.         chart.draw(data, options);
  32.       }
  33.     </script>

¿Qué es lo que estaré omitiendo o haciendo mal?
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.

Etiquetas: cadena, formatear, funcion, javascript, js, 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 15:14.