Пожалуйста, обратитесь в приведенном ниже примере кодаКак мы можем сделать свойство JavaScript глобальным?
var report = {
chartTypes : null,
init: function() {
this.getChartTypes(function(data){
this.chartTypes = data;
});
},
getChartTypes: function(callback) {
$.ajax({
data:'',
url:'',
success:function(response){
chartTypes = JSON.parse(response);
callback(chartTypes);
}
});
},
getToolbar:function() {
this.chartTypes --------------- NULL
}
}
getChartTypes
функция загрузки различных типов диаграмм, с помощью AJAX. Поэтому я ставлю его функцией обратного вызова. Данные принимаются успешно. Но когда я использую this.chartTypes
в другой функции, например getToolbar
, он говорит, что this.chartTypes
- null
. Даже я инициализировал то же самое в начале. Может быть вопрос о масштабах. Пожалуйста, порекомендуйте.
Об этом ответе уже здесь: http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript –
@NeilMunro это * не * в первую очередь проблема с областью - это проблема async. – Alnitak
Кажется, вы присваиваете значение переменной chartTypes внутри обратного вызова успеха AJAX. Поэтому перед вызовом функции getToolbar, которая считывает эту переменную, вы должны убедиться, что функция 'getChartTypes' была вызвана, и запрос AJAX успешно завершил выполнение. –