为什么我的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请求?