2010-07-24 8 views
5

esta es mi primera publicación, pero estoy emocionado de unirme a esta comunidad. Tengo una pregunta con respecto a JavaScript que estoy completamente perplejo.El método JavaScript comienza con las variables asignadas ?? muy confundido

Estoy escribiendo una aplicación de JavaScript que extrae datos de un servidor utilizando ajax y los agrega a un gráfico. Estoy usando Jquery y Highcharts como marco y luego estoy escribiendo mi propio 'envoltorio' de JavaScript alrededor de Highcharts para producir la interfaz.

Cuando se devuelve la llamada a la función processData con la respuesta jSON, comienza con i = 1, aunque ni siquiera debería inicializarlo o incluso declararlo. También se establecen otras variables. (Lo sé usando herramientas de desarrollador de Chrome para depurar). Esto hace que mi ciclo no se ejecute y ninguno de mis datos se agrega al gráfico.

No sé cuánto código mostrar, pero estas son las partes más relevantes. Puedo agregar más si es necesario.

function getData(series, min, max, numpts) { 
     if (series === undefined) { 
      console.log("error on getData"); 
      return; 
     } 

     var request = {}; 
     request.series = series; 

     if (min !== undefined) { 
      request.start = min; 
     } //in seconds 
     if (max !== undefined) { 
      request.end = max; 
     } 
     if (numpts !== undefined) { 
      request.numpts = numpts; 
     } 
     $.getJSON('/data', request, processData); 
     return; 
    } 

    function processData(data) { 
     // handle the data after it comes back from an ajax request 
     var curSeries, 
      chartSeries, 
      curPoint; 

     for (var i = 0; i < data.length; i ++) { 
      curSeries = data[i]; 
      chartSeries = chart.get(curSeries.name); 

      if (chartSeries === null) { 
       //alert("oops"); 
       chart.addSeries(curSeries); 
      } else { 
       for (var j = 0; j < curSeries.data.length; j ++) { 
        curPoint = curSeries.data[j]; 
        chartSeries.addPoint(curPoint, false); 
       } 
      } 
     } 
     chart.redraw(); 
    } 

Estos son los dos métodos de una clase que declaro llamado gráfico.

Gracias si alguien tiene alguna idea! -Matt P

+4

'i' nunca comenzará como 1. La única forma en que su ciclo no se ejecutará es si data.length == 0. Haga' alert (data.length) 'en la parte superior de' processData' y verifique. – Matt

Respuesta

2

Me consuelo inspeccionan objeto sus datos para asegurarse de que es lo que se espera, como el bucle debe estar funcionando bien, incluso si i es pre-declaró: estás asignando 0 a él en el principio del ciclo, de todos modos.

La única razón que se me ocurre que i sería definido e inicializado antes definido e inicializado es si algún otro sitio en su base de código no inicializa el i con el var palabra clave. Hacer eso sería volcarlo en el alcance global (el ventana objeto), por lo que está disponible a través de cierre para todas y cada una de las funciones en su base de código.

Si no está en uno de sus archivos, puede estar en la biblioteca gráfica de Highcharts (en cuyo caso se ejecuta muy rápidamente lejos de dicha biblioteca).

+0

También es posible que la biblioteca jQuery filtre la variable al alcance global, aunque en general tiene un buen alcance. De todos modos, como dijiste, no debería importar. Javascript ha vivido con muchas variables globales durante décadas, solo recientemente el conocimiento del alcance ha sido ampliamente difundido. – Guffa

+0

Así que he estado usando el depurador de cromos, y como sabía que ya estaba inicializado ... Sin embargo, ejecuté mi código a través de jslint y limpié algunas cosas, la mayoría de las veces espaciadas y cosas que faltaban; y, de repente, ha dejado de hacer eso ... No estoy seguro de por qué, porque nada realmente cambió cerca de esa función. También creo que puede haber sido un problema de Chrome. He estado operando en la misma pestaña por un tiempo antes de eso, es posible que haya corrompido la consola de alguna manera. :( – MattyP

Cuestiones relacionadas