以下代码块成功返回数组值(编号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超出范围并被垃圾收集一样。
答案 0 :(得分:9)
这是由于$.get()
的异步性质造成的。在您执行警报时,AJAX请求尚未运行。
在请求的成功回调中进行警报,其中发生“No.1”警报。
答案 1 :(得分:2)
$.get()
是异步的。因此,您作为第二个参数编写的函数不会被调用,直到加载文件,然后在您的成功函数执行之前到达return
函数的getCsv
,这就是数组为空的原因。
请参阅此讨论的答案以获得解决方案:
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?