使用javaScript显示特定记录

问题描述:

我正在使用jQuery的javaScript。我有一些数据,但显示两次。使用javaScript显示特定记录

<input type="hidden" id="btnlistTime" /> 
for(var i = 0; i < msg.driverList.length; i++){ 
     $.ajax({ 
      type: "post", 
      url: "data/get_lastReportedTime.php", 
      data: {Driver: msg.driverList[i].fullname} 
     }).done(function (data){ 
      $('#btnlistTime').val(data); 
      for(var i = 0; i < msg.driverList.length; i++){ 
       OnlineDriver.push([msg.driverList[i].id, 
           msg.driverList[i].fullname, 
           $('#btnlistTime').val(), 
           msg.driverList[i].lat, 
           msg.driverList[i].lng, 
           msg.driverList[i].logintime]); 
      } 
     }); 
} 
UpdateOnlineDriver(OnlineDriver); 

function UpdateOnlineDriver(data) { 

    tableOnlineDriver = $('#tblDriverDetails').dataTable({ 
     "data": data, 
     "bFilter": true, 
     "stateSave": true, 
     "columnDefs": [    
       {"sClass": "hide_me", "aTargets": [3]}, 
       {"sClass": "hide_me", "aTargets": [4]}, 
       {"sClass": "hide_me", "aTargets": [5]} 
     ] 
    }); 
} 

,并使用AJAX我从数据库中获取最后一次,并添加到msg.driverList,它是来自插座,像这样。

('1059', 'Ashish', '9.962479', '-84.082434', '1324567890'); 
('1060', 'Ashish1', '9.962479', '-84.082434', '1324567890'); 
('1061', 'Bhargav', '9.962479', '-84.082434', '0987654321'); 

但问题是,当我referece它表明这样的页面,

('1059', 'Ashish', '9.962479', '-84.082434', '1324567890'); 
('1059', 'Ashish', '9.962479', '-84.082434', '1324567890'); 
('1060', 'Ashish1', '9.962479', '-84.082434', '1324567890'); 
('1060', 'Ashish1', '9.962479', '-84.082434', '1324567890'); 
('1061', 'Bhargav', '9.962479', '-84.082434', '0987654321'); 
('1061', 'Bhargav', '9.962479', '-84.082434', '0987654321'); 

所以请帮助我我该怎么解决这个问题,我想告诉喜欢,

('1059', 'Ashish', '9.962479', '-84.082434', '1324567890'); 
('1060', 'Ashish1', '9.962479', '-84.082434', '1324567890'); 
('1061', 'Bhargav', '9.962479', '-84.082434', '0987654321'); 

请帮助我,thax提前。

+0

想要在'btnlistTime'中显示什么:你在每次迭代中覆盖它,所以只有你设置的最后一个值会保留... – trincot

请尝试更改变量名的for循环如下:

for(var i = 0; i < msg.driverList.length; i++){ 
    $.ajax({ 
     type: "post", 
     url: "data/get_lastReportedTime.php", 
     data: {Driver: msg.driverList[i].fullname} 
    }).done(function (data){ 
     $('#btnlistTime').val(data); 
     // change var "i" to "j" 
     for(var j = 0; j < msg.driverList.length; j++){ 
      OnlineDriver.push([msg.driverList[j].id, 
          msg.driverList[j].fullname, 
          $('#btnlistTime').val(), 
          msg.driverList[j].lat, 
          msg.driverList[j].lng, 
          msg.driverList[j].logintime]); 
     } 
    }); 
} 

你在你的代码的几个问题:

  • 您提供done职能中的异步执行代码将在之后执行您的电话UpdateOnlineDriver(OnlineDriver)。因此,首先将执行整个外部for循环,然后UpdateOnlineDriver,然后才会开始调用done的回调函数。为了解决这个问题,你需要在done回调中调用它,并且只有当你检索到最后一个数据时。

  • 这是没有意义的有回调函数内的for循环,因为它会单独为每个驱动程序已经(参见外环)被称为:算了算的push电话你会做的数量:每个迭代外部循环,您将重新迭代所有驱动程序并执行push。所以这是一个二次推动量。不能成为你想要的。

  • 一旦内for环路解除,您将有怎样的变化第一次运行到结束的问题,然后才回调函数被调用许多次,每个的价值i等于阵列的长度。但是,您需要在回调的每次调用中获得不同的i值。要做到这一点,有很多解决方案,其中之一是使用let而不是var

这里是for循环部分的修正建议:

// Use "let" instead of "var" to have a locally scoped variable 
// which is available within the $.ajax callback 
for(let i = 0; i < msg.driverList.length; i++){ 
    $.ajax({ 
     type: "post", 
     url: "data/get_lastReportedTime.php", 
     data: {Driver: msg.driverList[i].fullname} 
    }).done(function (data){ 
     // Do not iterate here. 
     $('#btnlistTime').val(data); 
     OnlineDriver.push([ 
      msg.driverList[i].id, 
      msg.driverList[i].fullname, 
      $('#btnlistTime').val(), 
      msg.driverList[i].lat, 
      msg.driverList[i].lng, 
      msg.driverList[i].logintime 
     ]); 
     // If this is the last entry, then call out 
     if (i === msg.driverList.length-1) { 
      UpdateOnlineDriver(OnlineDriver) 
     } 
    }); 
} 

注意,你会一次又一次地改写的btnlistTime的价值,所以它最终只显示最后获取的数据驱动程序。