2012-09-01 47 views
8

Estoy tratando de actualizar los gráficos altos en la carga de la página y en seleccionar el menú de cambio con la llamada JQUERY AJAX. Se están devolviendo datos en formato [[10,1228800000], [10,1228800000]]. El gráfico está en blanco y no grafica ninguno de los datos.Cargar datos en Highcharts con Ajax

Probé varias soluciones publicadas aquí pero ninguna funcionó.

var chart; 
     $(document).ready(function() { 


      var options = { 
       chart: { 
        renderTo: 'stats', 
        defaultSeriesType: 'spline' 
       }, 
       title: {text:''}, 
       xAxis: { 
        type: 'datetime' 
       }, 
       yAxis: {}, 
       series: [] 
      }; 
    var month = 'July'; 
    $.ajax({ 
     type: "POST", 
     data: "month="+month, 
     url: "update_visits_chart", 
     success: function (data) { 

      options.series.push(data); 
      chart = new Highcharts.Chart(options); 
     } 
    }); 

¿Algún error? gracias por adelantado. EDIT:

CÓDIGO DE ÚLTIMO aún no funciona:

var options = { 

      chart: { 
       renderTo: 'stats', 
       type: 'spline' 
      }, 
      title: { 
       text: '' 
      }, 
      xAxis: { 

       type:'datetime', 
       tickInterval: 30 * 24 * 3600 * 1000, 
       dateTimeLabelFormats: { 
        day: '%b %e' 
       }, 
       labels: { 
        rotation: -45, 
        align: 'right' 
       } 
      }, 
      yAxis: { 
       title: { 
        text: 'Number of visits' 
       }, 
       min: 0 
      }, 
      tooltip: { 
       formatter: function() { 
         return Highcharts.dateFormat('%b %e', this.x) +'<br />'+this.y+' visit(s)'; 
       } 
      }, 
      legend: { 
       enabled: true 
      }, 
      credits: { 
       enabled: false 
      }, 
      exporting: { 
       enabled: false 
      }, 
      series: [{ 
       name: 'Number of Visits', 
       data: [] 
      }] 
     }; 
     var month = 'July'; 
     $.ajax({ 
      type: "POST", 
      url: "update_visits_chart", 
      data: "month="+month, 
      success: function(data){ 
       options.series[0].data = data; 
       chart = new Highcharts.Chart(options); 
      } 
     }); 

Respuesta

8

Tienes que usar la méthode setData de la serie objeto como descriped en la documentación. En su caso es options.series[0].setData(Data)

Y creo que tiene que convertir su resultado Ajax de cadena en un objeto/matriz real usando JSON.parse(data).

EDIT: @Ricardo Lohmann: en el Ajax de guardia no especificó el tipo de datos que espera en la respuesta, por lo que jQuery va a adivinar el tipo de datos. Pero no reconocerá una cadena que comience con [ como JSON y dudo que su respuesta se publique con el tipo de mime correcto application/json. Entonces, especificar el tipo de mimo correcto también debería resolver el problema. Pero no tengo un ejemplo del responsable ajax completo del interrogador. Así que solo estoy adivinando, también.

lo recomiendo la siguiente llamada AJAX:

$.ajax({ 
    type: "POST", 
    url: "update_visits_chart", 
    data: {month: month}, 
    dataType: 'json', 
    success: function(data){ 
     options.series[0].setData(data); 
    } 
}); 

@Jugal Thakkar

$.getJSON es sólo un atajo para el Ajax de guardia arriba, pero es menos flexible porque tiene menos opciones.

+0

No pensé que tenía que hacer eso. gracias por señalarlo. –

+0

¿Por qué tiene que hacerlo? no está siendo creado dinámicamente. –

+0

alternativamente, creo que también puedes usar $ .getJSON. Ref http://api.jquery.com/jQuery.getJSON/ –

4

Usted tiene que fijar directamente a data serie porque data ya es una matriz multidimensional.
El siguiente código lo arreglará.
Cambiooptions.series.push(data);aoptions.series = data;

+0

Sí, de lo contrario puede escribir la creación de la opción de carta completa dentro de la devolución de llamada AJAX. eg @ http://jsfiddle.net/jugal/j4ZYB/ –

+0

Cuando hago eso obtengo un cuadro en blanco con 479 artículos de la serie. Supongo que esos elementos de la serie 479 en la leyenda son los puntos de datos reales. –

+0

He actualizado el código de la pregunta en la parte inferior, por favor, hágame saber por qué esto cargaría un gráfico en blanco –

Cuestiones relacionadas