Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 离开后。获取数组将丢失数据_Javascript_Ajax_Csv - Fatal编程技术网

Javascript 离开后。获取数组将丢失数据

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

我知道Ajax有些地方我还没有理解,但我需要帮助来理解。在下面的代码中,myArray的内容在标签“A”处,但在标签“B”处为空。代码的目的是读取多个csv文件,存储每个文件中的一些值,并在脚本中稍后使用myArray。我知道Ajax请求(.get)中一定有vars。谢谢


$.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
        }
    });
});