2012-10-04 41 views
22

he resuelto mi problema, pero no puede responder por mí mismo ya que soy muy nuevo en este sitio:"El recipiente no está definido" Google tabla

resulta que necesitaba usar el siguiente:

chart = new google.visualization.PieChart(document.getElementById('pie_today_div')); 

que estaba usando jQuery para acceder al elemento, $('#pie_today_div'). A partir de ahora la evidencia apunta al hecho de que el constructor PieChart tiene que tener el código estándar JS, document.getElementById('pie_today_div')

Tal vez algo más en juego, pero cambiando la forma en que se accede al elemento contenedor fija mi código

emisión original PARA OBTENER REFERENCIA A MI SOLUCIÓN

Me aparece el mensaje "El contenedor no está definido" cuando intento crear una instancia de un objeto Google PieChart.

Validé mi página en http://validator.w3.org/ y consigo una bandera bastante verde diciendo que valida.

no recibo js errores al cargar la página. Mi llamado Ajax está haciendo un ida y vuelta completa con los datos que quiero de la DB.

Aquí es mi HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
     <link href="/css/note.css?10022012" rel="stylesheet" type="text/css" media="screen"> 
     <script type="text/javascript" language="javascript" src="/call/js/jquery-1.7.2.min.js"></script> 
     <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
     <script type="text/javascript">google.load('visualization', '1.0', {'packages':['corechart']});</script> 
     <script type="text/javascript" language="javascript" src="/call/js/init.js?10042012-2"></script> 
     <title>Call Stats</title> 
    </head> 
    <body> 
     <a href="#" id="pie_today_link">Today Stats</a> 
     <div id="pie_today_div"></div> 
    </body> 
</html> 

aquí es el js:

function drawPieChartToday() { 

    $.post('/call/ajax.php5',{ 
     action:'pieToday' 
    }, function(ticketData) { 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'Count'); 
     data.addColumn('number', 'Topic'); 
     for (var key in ticketData){ 
      data.addRow([key, ticketData[key]]); 
     } 
     options = { 
      title: 'Issue Topics' 
     }; 
     alert($('#pie_today_div').attr('id')); 
     chart = new google.visualization.PieChart($('#pie_today_div')); 
     chart.draw(data, options); 
    },'json');  
} 

Aquí está mi código de depuración para asegurarse de que estaba siendo encontró el elemento: alert($('#pie_today_div').attr('id')); < - alertas "pie_today_div"

+1

Mire mi respuesta, la razón es que el selector jquery devuelve un conjunto de elementos coincidentes (una matriz), incluso cuando se seleccionan identificadores únicos. – abidibo

+0

esta fue una información muy útil, necesito recordarla por el resto de mi vida de TI. –

Respuesta

28

No soy un ventilador de jQuery, pero creo que $ ('# pie_today_div') devuelve un conjunto de elementos coincidentes. El cálculo del atributo funciona porque (desde jquery documentation) "obtiene el valor de un atributo para el primer elemento en el conjunto de elementos coincidentes".

Así que trate

chart = new google.visualization.PieChart($('#pie_today_div')[0]); 

o directamente

chart = new google.visualization.PieChart(document.getElementById('pie_today_div')); 
+1

cómo usar el nombre de clase herer? – Gowri

+1

chart = new google.visualization.PieChart ($ ('. Class-name') [0]); – abidibo

-1

Sólo quería mencionar, esto sucedió para mí después de un simple error. He cambiado

var data = new google.visualization.DataTable(huh); 

al siguiente en un esfuerzo para cambiar el tipo de gráfico:

var data = new google.visualization.BarChart(huh); 

pero esto es un error, cambia el gráfico donde se menciona el contenedor:

var chart = new google.visualization.ComboChart(document.getElementById('chart_div')); 
1

Debe haber una línea donde cargue los tipos de visualización que desea tener en su página web.Parece que este

google.load("visualization", "1", {packages: ["corechart"]}); 

Aquí Estoy cargando el paquete corechart. Coloque esta línea como la primera línea después de la etiqueta <script> dentro de su página HTML como index.html. Eso debería resolver el problema.

8

un error de contenedor es exactamente eso, se está buscando el ejemplo Identificación :

var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 

Usted recibirá este error “El recipiente no está definido” para Google Charts si le falta ese ID lo tanto una Div con esa id chart_div corregirá esto