Я думаю, что вы должны вернуть seriesInFile из функции обратного вызова $ .GET
function getSeries(filename){
//create an array where objects will be stored.
var seriesInFile=[];
$.get('/public/csv/'+filename+'.csv',
function(data) {
// Split the lines
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
//elements from each line are taken and stored
series = {
//some other attributes here, I took them off for this example
data: []
}
$.each(items, function(itemNo, item) {
series.data.push(parseFloat(item));
});
seriesInFile.push(series);
});
console.log(seriesInFile); //it works here!
// do what you need to do with seriesInfile here
//like calling a function to display it
});
//here seriesInFile is an empty array;
};
Поскольку $ .GET выполняет асинхронный вызов на сервер, весь остальной код выполняется: в вашем примере вы возвращаете seriesInFile как пустой массив, потому что ваша функция не ожидает завершения вызова AJAX и просто возвращает seriesInFile как вы заявили это.
Если вы хотите вернуть его, вы должны сделать это в функции обратного вызова $ .GET, которая выполняется при успешном вызове AJAX.
РЕДАКТИРОВАТЬ - Как предлагается в комментарии, возврат из обратного вызова, вероятно, не работает (никогда не пробовал). Обычно вы должны делать все, что вам нужно, прямо из функции обратного вызова (это то, что я обычно делаю). Если вам нужна помощь с чем-то конкретным, я могу помочь