2015-02-06 6 views
-2

здесь мой сценарий:Uncaught TypeError: Не удается прочитать свойство «0» неопределенной

<script> 
var count; 
var obj; 

function recherche() { 
    xhr = new XMLHttpRequest(); 
    xhr.open("GET", "test.json", true); 
    xhr.send(null); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4 && xhr.status == 200) { 
      var res = xhr.responseText; 
      obj = JSON.parse(res); 

      for (count = 0; count < obj.length; count++) { 
       alert(obj[count].humidity); 
      } 
     } 

    } 

} 
          alert(obj); 

window.onload = recherche; 
</script> 

У меня есть эта ошибка после запуска этого сценария:

Uncaught TypeError: Cannot read property '0' of undefined 

первый тревожный сигнал работает отлично показал мне 20 , 30,40, но если я сделаю предупреждение снаружи, я не определился.

Я хотел бы использовать объект obj, чтобы использовать его данные, хранящиеся из json-файла, в качестве данных для рисования диаграмм далее в скрипте. Но эта ошибка появляется.

что я сделал неправильно?

ответ

1

По умолчанию XHR-запросы: асинхронный. Это означает, что запускает, но они заканчиваются позже (поэтому у них есть обратные вызовы, а не возвращаемые значения). Просто используйте obj в обратном вызове.


Side Примечание: Ваш код становится жертвой The Horror of Implicit Globals (вы никогда не объявить xhr переменные).

+0

но мне нужно obj позже в другой функции:/ –

+0

@YoussefKamoun: Затем вы вызываете эту функцию из обратного вызова. –