Javascript Papa parse运行不正常
使用PapaParse,我正在解析一个csv文件,然后将其添加到变量dataShort和dataTotal中。我能够在完整函数中记录dataShort和dataTotal,但不能记录在它下面。我想这是因为函数是异步运行的 因此,以下函数(changeData和dataReady)无法成功运行,因为它们需要Papa解析来完成解析。如何使changeData()生效;在函数parseCSV中,是否仅在上述解析完成时运行Javascript Papa parse运行不正常,javascript,jquery,papaparse,Javascript,Jquery,Papaparse,使用PapaParse,我正在解析一个csv文件,然后将其添加到变量dataShort和dataTotal中。我能够在完整函数中记录dataShort和dataTotal,但不能记录在它下面。我想这是因为函数是异步运行的 因此,以下函数(changeData和dataReady)无法成功运行,因为它们需要Papa解析来完成解析。如何使changeData()生效;在函数parseCSV中,是否仅在上述解析完成时运行 函数解析CSV(evt){ var file=evt.target.files
函数解析CSV(evt){
var file=evt.target.files[0];
parse(文件{
标题:对,
动态打字:对,
完成:功能(结果){
dataShort=结果。数据;
dataTotal=结果。数据;
console.log(results.data);
log(“dataShort:+dataShort”);
console.log(“dataTotal:+dataTotal”);
}
});
log(“dataShort:+dataShort”);
console.log(“dataTotal:+dataTotal”);
changeData();
}
函数changeData(){
$.each(数据短、函数(索引、项){
if(项目[“CHILDoc中的项目]。长度>20){
item[“Items in CHILDoc”]=item[“Items in CHILDoc”]。子字符串(0,18)+“…”;
}
如果(项目[“儿童中心的Kwadrant Ondereel”]!=“Ingrijpende gebeurtenissen”&项目[“儿童中心的Waarde”]。长度>20){
item[“Waarde in CHILDoc”]=item[“Waarde in CHILDoc”]。子字符串(0,15)+“…”;
}
})
//console.log(dataShort);
//console.log(dataTotal);
dataReady();
}
异步运行时,您是对的。您可以从complete
事件函数直接调用changeData
函数。因此,请尝试以下方法:
function parseCSV(evt) {
var file = evt.target.files[0];
Papa.parse(file, {
header: true,
dynamicTyping: true,
complete: function(results) {
dataTotal = results.data;
dataShort = results.data;
changeData(dataShort);
}
});
}
function changeData(var ds) {
$.each(ds, function(index, item) {
if (item["Items in CHILDoc"].length > 20) {
item["Items in CHILDoc"] = item["Items in CHILDoc"].substring(0, 18) + "...";
}
if (item["Kwadrant onderdeel in CHILDoc"] != "Ingrijpende gebeurtenissen" && item["Waarde in CHILDoc"].length > 20) {
item["Waarde in CHILDoc"] = item["Waarde in CHILDoc"].substring(0, 15) + "...";
}
});
dataReady();
}
在这里,我更改了changeData
函数以接受结果数据,并从complete
函数调用它。请注意,我删除了dataShort
和dataTotal
变量,因为我在这里没有看到它的任何用途,但如果您在代码中的某个地方进一步使用它们,请将其还原回来
编辑:
dataShorts
在调用changeData
函数后被修改,但dataTotal
仍将具有原始结果。我假设您在顶部的某个位置同时声明了dataShort
和dataTotal
变量。我希望发生的是,数组dataShort中的数据确实会被函数changeData缩短,但数组dataTotal保持不变。现在,当我用changeData()运行上面发布的代码时;放置在完整的results.data中,数据由changeData而不是dataShort更改。我使用dataShort添加一个带有文本的跨度,这样即使长的数据条目也适合我所做的div。dataTotal用于将标题添加到缩短的跨距中,以便仍然可以阅读文本。