2016-10-11 61 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/