2016-10-11 62 views
3

我需要加载大量的csv文件。然而我用这个函数加载。JavaScript加载多个csv并创建全局可访问阵列

$.ajax({ 
    url: 'my.csv', 
    dataType: 'text', 
}).done(successFunction); 

然后我运行successFunction,与我创建如上阵列,并用相同的代码,但与功能不同的名称创建另一个阵列等。这很多相同的代码。加载多个csv和返回数组的最简单方法是什么?

重要 我需要有时创建二维数组另一个时间5等等。所以函数必须包括该参数。

为了创建使用函数这样阵列IM:

function successFunction(data) { 
    var promenna = data.replace(/\n/g,";").split(";"); 
    var result = []; 
    for (var i = 0; i < promenna.length; i+=2) { 
    var line = []; 
    line.push(promenna[i]); 
    line.push(promenna[i+1]); 
    result.push(line); 
    } 
    for (var i = 0; i < result.length; i += 1){ 
    $("#tyden" + i + "").append(result[i][0]); 
    $("#tyden" + i + "kolik").append(result[i][1]); 
    } 
} 

但对于另一个文件I重复basicly相同的代码。我不知道如何为所有文件使用一个函数。

+1

你尝试和失败?或者您是否在寻找某人为您编写代码? – Ted

+0

将'$ .ajax'调用引用推入到一个对象数组中,并在所有文件读取完成时使用'$ .when'执行,并在'done'回调中捕获数据。看一看文档中的ajax示例:https://api.jquery.com/jquery.when/ – Nirus

回答

0

的东西多一点ES6十岁上下

var urls = ['csv1.txt', 'csv2.txt', 'csv3.txt', 'csvN.txt'] 
var csvArr = await Promise.all(urls.map(url => fetch(url).then(res => res.text()))) 

> [csvContent1, csvContent2, csvContent3, csvContentN] 
+0

我很惊讶地得到接受的答案,你知道你必须做什么来支持它,对吧? – Endless

1

首先,我不推荐使用您自己的CSV解析器。此问题已解决,请使用a library

问题的另一部分是“我需要通过HTTP使用jQuery加载许多文件”,这很容易。

  1. 准备文件网址列表。
  2. 将其转换为请求列表。
    • 您可以使用jQuery的.then()来即时转换传入数据。
    • 在这种情况下,通过CSV解析器传递它将是转换。
    • 您可以使用jQuery的.done()单独处理响应,因为他们进来
  3. 可选:等待请求完成。
    • 您可以使用jQuery的.when()等待多个异步操作。
    • 您可以使用jQuery的.done()来统一处理响应。

所以:

var files = ['csv1.txt', 'csv2.txt', 'csv3.txt', 'csvN.txt']; 

var requests = $.map(files, function (i, url) { 
    return $.get(url).then(CSV.parse); 
}); 

$.when.apply($, requests) 
    .done(function (csvObjects) { 
     // everything has loaded successfully 
     $.each(csvObjects, function (i, csv) { 
      // do something with each file 
     }); 
    }) 
    .fail(function (jqXhr, status, error) { 
     // something went wrong, handle the error 
    }); 

必要阅读:https://api.jquery.com/category/deferred-object/