0

Получаю после вызова функции __self.getJSonData() - пустой обьект {}. Может кто-то найдет ошибку/проблему.

Вот код

(function() {

function Calculator() {

var __self = this;

this.render = function() {
  console.log(__self.getJSonData());
}

}

//Получить данные из JSON Calculator.prototype.getJSonData = function() { var ajax = new XMLHttpRequest(); var url = 'data.json'; var self = this; var data = {};

  ajax.onreadystatechange = function() {
    if (ajax.readyState == 4 && ajax.status == 200) {
      returnData(ajax.responseText);
    }
  };

  ajax.open("GET", url, true);
  ajax.send();



  function returnData(json) {
    data = JSON.parse(json);
    console.log(data);
  }

  return data;

};

window.calculator = new Calculator(); calculator.render();

})();

cheops
  • 19,454
  • 29
  • 48
  • 139
  • getJSonData возвращается гораздо раньше, чем срабатывает асинхронный ajax.onreadystatechange, внутри которого Вы присваиваете data непустое значение –  Jun 01 '16 at 14:45
  • а можно как то это реализовать по другому ? – Victor-AA Jun 01 '16 at 14:50

1 Answers1

0

(function() {

function Calculator() { this.render = this.getJSonData( function(data) { console.log(data); } ); }

//Получить данные из JSON Calculator.prototype.getJSonData = function(callback) { var ajax = new XMLHttpRequest(); var url = 'data.json'; var self = this; var data = {};

  ajax.onreadystatechange = function() {
    if (ajax.readyState == 4 && ajax.status == 200) {
      returnData(ajax.responseText);
    }
  };

  ajax.open("GET", url, true);
  ajax.send();



  function returnData(json) {
    data = JSON.parse(json);
    if (callback) {
        callback(data)
    }
  }

};

window.calculator = new Calculator(); calculator.render();

})();

E_p
  • 3,151