2017-06-06 55 views
0

我正在使用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); 
     } 
    }); 
} 
+0

因为文件的解析是异步的,你需要使用回调像'Papa.parse (fileInput.files [0],{ \t complete:function(results){ \t \t console.log(results); \t} }); ''complete'是回调函数 – Curiousdev

+0

@Curiousdev,我不明白。抱歉。 –

回答

0

按照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链功能,然后提醒错误计数器。 –