当不在Ajax调用时从阵列中移除

问题描述:

我有一个函数调用PHP文件中的GPS坐标,通过AJAX在地图上显示它们,这一切都正常。当不在Ajax调用时从阵列中移除

该函数检查它获取的标记是否已经在地图上,如果是,则更新它的位置,如果它不在地图上,它也会将地图添加到地图中。

我现在需要和似乎无法工作的是,我需要删除以前使用的标记,不再更新。

这里是我的代码:

setInterval(
      $.ajax({ 
       type: "POST", 
       url: 'markers.php', 
       success: function(data){ 
        var json_obj = jQuery.parseJSON(JSON.stringify(data)); 
        for (var i = 0; i < json_obj.length; i++) { 
         newcoordinate = new google.maps.LatLng(json_obj[i].lat, json_obj[i].lng); 
         if (markersArray[json_obj[i].name] && markersArray[json_obj[i].name].setPosition){ 
          markersArray[json_obj[i].name].setPosition(newcoordinate); 
          if(json_obj[i].type == 'onderweg') { 
           markersArray[json_obj[i].name].setIcon(onderweg); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="black"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
          if(json_obj[i].type == 'leeg') { 
           markersArray[json_obj[i].name].setIcon(leeg); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="black"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
          if(json_obj[i].type == 'bezet') { 
           markersArray[json_obj[i].name].setIcon(bezet); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="white"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
          if(json_obj[i].type == 'afwachten') { 
           markersArray[json_obj[i].name].setIcon(afwachten); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="black"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
          if(json_obj[i].type == 'pauze') { 
           markersArray[json_obj[i].name].setIcon(pauze); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="black"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
          if(json_obj[i].type == 'geendienst') { 
           markersArray[json_obj[i].name].setIcon(geendienst); 
           var label = markersArray[json_obj[i].name].getLabel(); 
           label.color="black"; 
           markersArray[json_obj[i].name].setLabel(label); 
          } 
         } else { 
          addMarker(json_obj[i].lat, json_obj[i].lng, json_obj[i].name, json_obj[i].afkorting, json_obj[i].type); 
         } 

        } 
       }, 
       dataType: "json"//set to JSON  
      })  
     } 
    ,3000); 

有人可以请点我在正确的方向来解决这个问题?

JSON数据:

[{"id":"1505108","0":"1505108","name":"Benny","1":"Benny","afkorting":"Be","2":"Be","address":"","3":"","speed":"0","4":"0","lat":"53.198181","5":"53.198181","lng":"6.563437","6":"6.563437","type":"onderweg","7":"onderweg","ts":"2017-04-17 18:26:34","8":"2017-04-17 18:26:34","ritid":"483648","9":"483648","bedrijf":"1","10":"1","ipadres":"188.207.111.80","11":"188.207.111.80","versie":"10","12":"10","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"},{"id":"1505110","0":"1505110","name":"Rene","1":"Rene","afkorting":"Re","2":"Re","address":"","3":"","speed":"0","4":"0","lat":"53.182274","5":"53.182274","lng":"6.577085","6":"6.577085","type":"leeg","7":"leeg","ts":"2017-04-17 18:26:37","8":"2017-04-17 18:26:37","ritid":"0","9":"0","bedrijf":"1","10":"1","ipadres":"188.207.126.119","11":"188.207.126.119","versie":"10","12":"10","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"},{"id":"1505112","0":"1505112","name":"Peter","1":"Peter","afkorting":"Pr","2":"Pr","address":"","3":"","speed":"0","4":"0","lat":"53.196129","5":"53.196129","lng":"6.581492","6":"6.581492","type":"bezet","7":"bezet","ts":"2017-04-17 18:26:39","8":"2017-04-17 18:26:39","ritid":"483650","9":"483650","bedrijf":"1","10":"1","ipadres":"92.69.203.230","11":"92.69.203.230","versie":"10","12":"10","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"},{"id":"1505113","0":"1505113","name":"Ivar","1":"Ivar","afkorting":"Iv","2":"Iv","address":"","3":"","speed":"0","4":"0","lat":"53.360897","5":"53.360897","lng":"6.414318","6":"6.414318","type":"onderweg","7":"onderweg","ts":"2017-04-17 18:26:39","8":"2017-04-17 18:26:39","ritid":"483649","9":"483649","bedrijf":"1","10":"1","ipadres":"188.207.122.118","11":"188.207.122.118","versie":"10","12":"10","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"},{"id":"1505114","0":"1505114","name":"Niels","1":"Niels","afkorting":"Ni","2":"Ni","address":"","3":"","speed":"0","4":"0","lat":"53.205700","5":"53.205700","lng":"6.586080","6":"6.586080","type":"bezet","7":"bezet","ts":"2017-04-17 18:26:40","8":"2017-04-17 18:26:40","ritid":"483633","9":"483633","bedrijf":"1","10":"1","ipadres":"92.69.223.185","11":"92.69.223.185","versie":"9","12":"9","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"},{"id":"1505109","0":"1505109","name":"John","1":"John","afkorting":"Jo","2":"Jo","address":"","3":"","speed":"0","4":"0","lat":"53.200897","5":"53.200897","lng":"6.596990","6":"6.596990","type":"leeg","7":"leeg","ts":"2017-04-17 18:26:36","8":"2017-04-17 18:26:36","ritid":"0","9":"0","bedrijf":"1","10":"1","ipadres":"92.69.230.150","11":"92.69.230.150","versie":"10","12":"10","inactief":"0","13":"0","beta":"0","14":"0","onzichtbaar":"0","15":"0"}] 

阵回声:

[_.Ne, _.Ne, _.Ne, _.Ne, _.Ne, _.Ne, Benny: _.Ne, Rene: _.Ne, Peter: _.Ne, Ivar: _.Ne, Niels: _.Ne…] 

这是我所得到的..但每个对象都有自己的价值观和脚本不工作..

+0

那岂不是更简单的只需更换与返回什么,整个标志器阵列。不会有更新或删除。 –

+0

你的数组最初的样子是什么?也许'if(in_array){/ * array_push/set new value * /}'可以做到吗? – OldPadawan

+0

@RusselMadere我之前做过,但是所有的标记都会在每次更新时闪烁,这很烦人。 –

我没有得到充分测试的机会,但你可以试试这个。我会说这不是很有效率。你循环两个数组,但至少循环不是嵌套的。

首先稍微改变你的成功处理程序(空行添加突出显示)。

  success: function(data){ 

       var idArray = []; 

       var json_obj = jQuery.parseJSON(JSON.stringify(data)); 
       for (var i = 0; i < json_obj.length; i++) { 

        idArray.push(json_obj[i].id); 

        newcoordinate = new google.maps.LatLng(json_obj[i].lat, json_obj[i].lng); 
        ... 

然后依次通过标记列阵(这里称为阵列,使用数组名),反向拼接和标记阵列不新idArray存在。

for (var i = array.length - 1; i >= 0; i--) 
{ 
    if (idArray.indexOf(array[i].id) < 0) array.splice(i, -1); 
} 

通过逆向工作,您不会搞乱早期数组成员的索引。

我有一个映射应用程序中的点的数组,我必须在运行中添加和删除点。在那里,我们替换数组,然后重新渲染地图。在拼接

更多信息 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice