2010-07-24 12 views
5

to jest mój pierwszy post, ale jestem podekscytowany dołączeniem do tej społeczności. Mam pytanie dotyczące JavaScript, o którym jestem całkowicie zakłopotany.Metoda JavaScript zaczyna się od zmiennych przypisanych? bardzo zdezorientowany

Piszę aplikację JavaScript, która pobiera dane z serwera przy użyciu ajax i dodaje go do wykresu. Używam Jquery i Highcharts jako ramy, a następnie piszę własną "wrapper" JavaScriptu wokół Highcharts, aby stworzyć interfejs.

Gdy funkcja processData zostanie wywołana z powrotem z odpowiedzią jSON, zaczyna się ona od i = 1, nawet jeśli nie powinienem jeszcze być inicjowany, a nawet deklarowany. Ustawiane są również inne zmienne. (Wiem o tym z debugowania za pomocą narzędzi programistycznych Chrome). To sprawia, że ​​moja pętla nie jest wykonywana i żadne z moich danych nie zostanie dodane do wykresu.

Nie wiem, ile kodu pokazać, ale są to najbardziej istotne części. W razie potrzeby mogę dodać więcej.

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(); 
    } 

Są to obie metody klasy I o nazwie graf wywołany.

Dzięki, jeśli ktoś ma jakieś pomysły! -Matt P

+4

'i' nigdy nie zacznie się jako 1. Jedynym sposobem, w jaki twoja pętla nie zostanie wykonana, jest data.length == 0. Wykonaj' alert (data.length) 'na górze' processData' i sprawdź. – Matt

Odpowiedz

2

Chciałbym pocieszyć sprawdzać dane sprzeciwiają się upewnić, że to, czego się spodziewać, jako że pętla powinien pracować poprawnie nawet jeśli i jest wstępnie zadeklarował: jesteś przypisanie do niej 0 u początek pętli.

Jedynym powodem mogę myśleć o tym chciałbym być zdefiniowane i zainicjowany przed zdefiniowane i inicjowany jest czy gdzie indziej w kodzie nie zainicjować í z var hasła. Wykonanie tego zrzuciłoby go do zakresu globalnego (obiekt window), udostępniając go poprzez zamknięcie dowolnej funkcji w bazie kodu.

Jeśli nie znajduje się w jednym z plików, może znajdować się w bibliotece wykresów highcharts (w takim przypadku należy bardzo szybko odejść od wspomnianej biblioteki).

+0

Jest również możliwe, że biblioteka jQuery przenosi zmienną do zakresu globalnego, chociaż ogólnie jest dość dobrze dopasowana. W każdym razie, jak powiedziałeś, nie powinno to mieć znaczenia. JavaScript od wielu dekad żył z dużą ilością zmiennych globalnych. Dopiero ostatnio wiedza o scopingu została szeroko rozpowszechniona. – Guffa

+0

Używam więc debuggera chromu, a to skąd wiedziałem, że został już zainicjowany ... Jednak uruchomiłem mój kod przez jslint i wyczyściłem kilka rzeczy, głównie spacing i rzeczy i brakujące; i nagle przestało to robić ... Nie jestem pewien dlaczego, ponieważ nic tak naprawdę nie zmieniło się w pobliżu tej funkcji. Myślę też, że mógł to być problem z chromem. Przez jakiś czas pracowałem na tej samej karcie, być może właśnie uszkodziłem konsolę. :( – MattyP

Powiązane problemy