Javascript在所有事件完成后执行警报(POST请求,Papaparse,Jquery Datatable插入)
问题描述:
我正在使用Papaparse,并且正在执行此代码。我有一个计数器(errorcounter),用于统计异步发布请求返回的错误数量。问题是我需要获取错误计数器的值,并且我正在通过alert来测试它。Javascript在所有事件完成后执行警报(POST请求,Papaparse,Jquery Datatable插入)
我认为警报在分析完成之前的发布请求之前执行。所有这些执行发生后如何执行警报:(解析,发送POST请求,并在jQuery的数据表显示结果
function verifyImportComputer() {
var errorcounter = 0;
resetImportComputer();
$('input[id=importFileComputer]').parse({
config: {
header: true,
skipEmptyLines: true,
step: function(results) {
$('#importErrorCounter').html(errorcounter);
$.each(results.data, function(index, data) {
$.post('com/import/getcomputerimport.cfm', {importData: JSON.stringify(data)}, function(data) {
var dataReturn = $.parseJSON(data);
var status = "";
jQuery.each(dataReturn.error, function() {
status+= "<div class='alert alert-danger'>"+this+"</div>";
errorcounter++;
});
ImportComputerTable.row.add([
dataReturn.asset_id,
dataReturn.asset_tag,
dataReturn.computer_type,
dataReturn.computer_name,
dataReturn.ip_address,
dataReturn.processor,
dataReturn.memory,
dataReturn.operating_system,
dataReturn.office,
dataReturn.graphics_card,
dataReturn.date_issued,
dataReturn.remarks,
dataReturn.is_active,
status
]).draw(false);
$('#importErrorCounter').html(errorcounter);
});
});
}
}
});
alert(errorcounter);
}
编辑
我做了这样的事情,因为有人张贴关于有。回调,但没有任何反应
function verifyImportComputer() {
errorcounter = 0;
resetImportComputer();
$('input[id=importFileComputer]').parse({
config: {
header: true,
skipEmptyLines: true,
step: function(results) {
$('#importErrorCounter').html(errorcounter);
$.each(results.data, function(index, data) {
$.post('com/import/getcomputerimport.cfm', {importData: JSON.stringify(data)}, function(data) {
var dataReturn = $.parseJSON(data);
var status = "";
jQuery.each(dataReturn.error, function() {
status+= "<div class='alert alert-danger'>"+this+"</div>";
errorcounter++;
});
ImportComputerTable.row.add([
dataReturn.asset_id,
dataReturn.asset_tag,
dataReturn.computer_type,
dataReturn.computer_name,
dataReturn.ip_address,
dataReturn.processor,
dataReturn.memory,
dataReturn.operating_system,
dataReturn.office,
dataReturn.graphics_card,
dataReturn.date_issued,
dataReturn.remarks,
dataReturn.is_active,
status
]).draw(false);
$('#importErrorCounter').html(errorcounter);
});
});
}
}
}, {
function() {
alert("haha");
alert(errorcounter);
}
});
}
答
按照documentation这应该工作(没有测试它虽然所以它可能不是 - 也许是工作了的jsfiddle):
function verifyImportComputer() {
errorcounter = 0;
resetImportComputer();
$('input[id=importFileComputer]').parse({
config: {
header: true,
skipEmptyLines: true,
step: function(results) {
$('#importErrorCounter').html(errorcounter);
$.each(results.data, function(index, data) {
$.post('com/import/getcomputerimport.cfm', {
importData: JSON.stringify(data)
}, function(data) {
var dataReturn = $.parseJSON(data);
var status = "";
jQuery.each(dataReturn.error, function() {
status += "<div class='alert alert-danger'>" + this + "</div>";
errorcounter++;
});
ImportComputerTable.row.add([
dataReturn.asset_id,
dataReturn.asset_tag,
dataReturn.computer_type,
dataReturn.computer_name,
dataReturn.ip_address,
dataReturn.processor,
dataReturn.memory,
dataReturn.operating_system,
dataReturn.office,
dataReturn.graphics_card,
dataReturn.date_issued,
dataReturn.remarks,
dataReturn.is_active,
status
]).draw(false);
$('#importErrorCounter').html(errorcounter);
});
});
}
}
},
complete: function() {
function() {
alert("haha");
alert(errorcounter);
}
}
);
}
我想我会倾向于添加行于一身去,而不是在每一步......
+0
它不起作用。我想出了如何去做。为每个异步发布请求添加一个.done链功能,然后提醒错误计数器。 –
因为文件的解析是异步的,你需要使用回调像'Papa.parse (fileInput.files [0],{ \t complete:function(results){ \t \t console.log(results); \t} }); ''complete'是回调函数 – Curiousdev
@Curiousdev,我不明白。抱歉。 –