Javascript 离开后。获取数组将丢失数据
我知道Ajax有些地方我还没有理解,但我需要帮助来理解。在下面的代码中,myArray的内容在标签“A”处,但在标签“B”处为空。代码的目的是读取多个csv文件,存储每个文件中的一些值,并在脚本中稍后使用myArray。我知道Ajax请求(.get)中一定有vars。谢谢Javascript 离开后。获取数组将丢失数据,javascript,ajax,csv,Javascript,Ajax,Csv,我知道Ajax有些地方我还没有理解,但我需要帮助来理解。在下面的代码中,myArray的内容在标签“A”处,但在标签“B”处为空。代码的目的是读取多个csv文件,存储每个文件中的一些值,并在脚本中稍后使用myArray。我知道Ajax请求(.get)中一定有vars。谢谢 $.get是异步的 在执行get时,放置在B的任何代码都将运行 在提供给get的函数中放置要对MyArray执行操作的任何代码,或者在get函数中放置另一个调用以对数据执行操作 $.get(file, function(dat
$.get
是异步的
在执行get
时,放置在B
的任何代码都将运行
在提供给get
的函数中放置要对MyArray执行操作的任何代码,或者在get函数中放置另一个调用以对数据执行操作
$.get(file, function(data)
{
lines = $.csv.toObjects(data);
$.each(lines, function(lineNo, line)
{
... code ...
myArray.push(someValue);
});
// myArray is ready here. Place any code that acts on it here...
});
// myArray may not be ready here, since the `get` hasn't finished yet.
问题是get回调在get请求返回时异步执行,但是get调用下面的代码在回调之前立即执行 您可以使用ajaxasync=false同步执行get。这会稍微慢一点,因为每次调用直到前一个调用结束才开始
var myArray = [];
var lines = [];
$.each(fileNames, function(lineNo, file)
{
$.ajax({
url: file,
success: function(data) {
lines = $.csv.toObjects(data);
$.each(lines, function(lineNo, line)
{
... code ...
myArray.push(someValue);
});
},
async:false
});
});
如果您不喜欢async:false方法,可以使用以下方法:
var myArray = [];
var lines = [];
var count = 0;
$.each(fileNames, function(lineNo, file)
{
$.get(file, function(data)
{
lines = $.csv.toObjects(data);
$.each(lines, function(lineNo, line)
{
... code ...
myArray.push(someValue);
});
}).done(function(){
count++;
if(count > fileNames.lenght){
// Code to use array goes here
}
});
});
这还不足以作为关闭异步功能的理由。
var myArray = [];
var lines = [];
var count = 0;
$.each(fileNames, function(lineNo, file)
{
$.get(file, function(data)
{
lines = $.csv.toObjects(data);
$.each(lines, function(lineNo, line)
{
... code ...
myArray.push(someValue);
});
}).done(function(){
count++;
if(count > fileNames.lenght){
// Code to use array goes here
}
});
});