javascript - 编码 jquery 事件,以便该事件中的函数需要在执行 ajax 之前完成
问题描述
我正在上传一个文件并用 javascript 解析它。解析完成后,我将解析结果上传到服务器。
问题是,在 ajax 启动之前解析没有完成,即使在解析例程上使用 async/await 也是如此。
代码:
$(`[name="Submit"]`).on(`click`, async (e)=> {
console.log(`getting file`);
e.stopPropagation();
e.preventDefault();
file = $(`[name="one"]`)[0].files[0];
newData=await parseCSV(file,/\t/);
console.log(newData)
return; //let's just end it here for now to see if newData actually has data;
formData=new FormData();
formData.append('one', new File([new Blob([newData])], 't.csv'));
console.log(`launching ajax`);
return;
$.ajax({
url: `taxupl_popup.asp`,
data: form_data,
cache: false,
contentType: false,
processData: false,
enctype: `multipart/form-data`,
type: `POST`,
}).done(function(data) {
console.log(`data`, data);
}).fail(function(xhr, textStatus, errorThrown) {
console.log(xhr, textStatus, errorThrown);
}).always(function() {
//clearInterval(updateStatusTimer);
});
});
async function parseCSV(file, delim) {
let retString;
let validStates=[`AA`]; //,`AL`,`CA`,`WA`,`CO`,`IL`,`LA`,`MI`,`NV`,`OH`,`OK`,`TN`,`TX`];
var regexReplace = new RegExp(delim, "g");
console.log(`reading file`);
var reader = new FileReader();
reader.onload = function(e) {
var rows = e.target.result.split("\r\n");
const rowCount=rows.length;
//console.log(`rows:`, rowCount);
let curRow=-1;
rows.some(function(r) {
curRow++;
if (validStates.indexOf(r.split(delim)[1])>-1||curRow===0) {
retString+=(r.replace(regexReplace,`,`)+`\r\n`);
}
if (curRow===100||curRow===rowCount) {
console.log(`got our data`);
return true;
}
});
};
return new Promise(function(resolve, reject) {
reader.readAsText(file);
resolve(retString);
});
}
解决方案
推荐阅读
- apache-kafka - 为什么 kafka 集群会出现错误“活动代理的数量 '0' 不符合所需的复制因子”?
- python - 使用 Python DataFrame 尝试提取以某个数字开头的列的所有行
- c# - 使用leadTools从图像c#创建电影
- android-studio - 如何在 Android Studio 中增加弹出窗口的字体大小?
- c# - 在 Visual Studio IDE 中运行测试时单元测试通过,但在使用 vstest.console.exe 和 Microsoft Fakes 时失败
- java - 在后台使用 JobService 时线程停止运行
- json - JSON数组比较自定义错误(sky-screamer)
- jquery - 如何使用数据表显示选择框特定项目的数据
- javascript - 有没有更简洁的方法来编写这个 React 代码?
- swift - 导航栏在 iPhone XS Max swift 上关闭视图控制器上的视图