为什么我的JavaScript函数没有填充我的数组?

以下代码块成功返回数组值(编号1 130879253000,34756)

function getCsv(file_name){ var array_holder = []; $.get(file_name, function(csv, state, xhr) { // inconsistency if (typeof csv != 'string') { csv = xhr.responseText; } // parse the CSV trades var header, comment = /^#/, x; $.each(csv.split('\n'), function(i, line){ if (!comment.test(line)) { if (!header) { header = line; } else { var point = line.split(';'), date = point[0].split('-'), time = point[1].split(':'); if (point.length > 1) { x = Date.UTC(date[2], date[1] - 1, date[0], time[2], time[1], time[0]); array_holder.push([ x, // time parseFloat(point[2]) // close ]); } } } }); // each alert('No. 1' + array_holder[0]); }); return array_holder; } 

在下面的代码部分中,我试图调用getCsv,但我得到的是未定义的2号

 $(function() { var trades = getCsv('trades.csv'); var spreads = getCsv('spreads.csv'); alert('No. 2' + trades[0]); } 

为什么我的数组没有填充? 在实际代码中,我按照此处列出的顺序将上述两个函数紧挨着。 因此,文件正确读取,就好像array_holder超出范围并被垃圾收集。

这是由于$.get()的异步特性造成的。 在您执行警报时,AJAX请求尚未运行。

在请求的成功回调中进行警报,其中发生“No.1”警报。

$.get()是异步的。 因此,您作为第二个参数编写的函数不会被调用,直到加载文件,然后在您的getCsv函数执行之前达到getCsv函数的return ,这就是数组为空的原因。 请参阅此讨论的答案以获得解决方案:
如何让jQuery执行同步而非异步的Ajax请求?