0

Ajax について欠けているものがあることはわかっていますが、理解するには助けが必要です。次のコードでは、myArray の内容はラベル "A" にありますが、ラベル "B" は空です。このコードの目的は、複数の csv ファイルを読み取り、各ファイルからいくつかの値を保存し、スクリプトの後半で myArray を使用することです。Ajax リクエスト (.get) に vars が含まれている必要があることはわかっています。ありがとう

var myArray = [];
var lines = [];

$.each(fileNames, function(lineNo, file) 
{
    $.get(file, function(data) 
    {
        lines = $.csv.toObjects(data);
        $.each(lines, function(lineNo, line) 
        {
            ... code ...
            myArray.push(someValue);
        });
        --- A ---
    });
    --- B ---
});
4

3 に答える 3

0

$.get非同期です。

に配置されたコードは、B実行中に実行されgetます。

MyArray に作用させたいコードを に提供された関数内に配置するgetか、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.
于 2013-04-28T00:04:09.437 に答える
0

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
        }
    });
});
于 2013-04-29T15:12:13.197 に答える