Для большой рекурсии?

1

У меня проблема с этим кодом. Скрипт генерирует где-то "слишком много рекурсивного цикла".

Сценарий правильно загружает данные AJAX, но он работает в цикле, говорит отладчик JavaScript?

    <script>
  function init_map() {
//var myLatLng = new google.maps.LatLng(52.1238433333,5.18094166667);
    var myLatLng = new google.maps.LatLng(0,0);
    var mapOptions = {
      zoom: 14,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

// Marker plaatsen in het midden, daarna wordt hij verplaatst naar juiste plek.
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

var infowindow = new google.maps.InfoWindow({
    content: 'Treinstel: 2203'
});


marker = new google.maps.Marker({
    position: myLatLng,
    map: map,
    draggable: false
});

google.maps.event.addListener(marker, 'click', function() {
    infowindow.open(map,marker);
});


  } 
      google.maps.event.addDomListener(window, 'load', init_map);

  function getCoords() {
    $.ajax({
    url: "api.php",
    type: "GET",
    cache: false, 
    data: {
        action : "trainset",
        number : '2203'
    },
    dataType: "text",
    success: function(returnedData) {
        var jsondata = jQuery.parseJSON(returnedData);
          //console.log(returnedData);
          var coords = jsondata.Latitude+','+jsondata.Longitude;
          //console.log('Lat: '+jsondata.Latitude);
          var coordsArray = coords.split(",");
          moveMarkerMap(coordsArray[0], coordsArray[1]);
          setTimeout(getCoords, 5000);
    },
    done: function(data) {
        //setTimeout(getCoords, 5000); // hier werkt hij niet.
    }   
     }); 
}

function moveMarkerMap(lat,lon) {
    var newLatLang = new google.maps.LatLng(lat,lon);
    map.panTo(newLatLang);
    marker.setPosition(newLatLang);
}      


  //setInterval(getCoords, 10000);

$(document).ready(function(){
    getCoords();
}); 
</script>

AJAX-запрос с строкой в формате JSON, которая верна:

{"2203": {"DateGPS": "2017-10-22T21:10: 29 + 02: 00", "DateReceived": "2017-10-22T21:10: 29.917 + 02: 00", "Longitude": 5.90089, "Широта": 51.98514, "Скорость": 0, "DOP": 0, "VehicleNumber": "2203", "VehicleType": "Train A", "TrainNumber": "1234"}}

Любая идея?

  • 0
    Ну, самая большая проблема, которую вы решили сами, не зацикливаясь с помощью setInterval. Я думал, что видел, как вы добавляете слушателей событий снова и снова, но я могу ошибаться
  • 0
    Отладчик должен показать стек вызовов, который даст вам знать, откуда возникла проблема, или, по крайней мере, предоставит информацию, которой вы должны поделиться.
Показать ещё 4 комментария
Теги:
loops
recursion

1 ответ

1

Вы устанавливаете временной интервал в функции успеха вашего вызова AJAX.

setTimeout(getCoords, 5000);

После вызова AJAX. Событие регистрируется "setTimeout" через 5 секунд. Так что фактически через 5 секунд снова вызывается AJAX и снова функция (getCoords) зарегистрирована, и это продолжается. Таким образом, вам необходимо контролировать эту регистрацию событий "setTimeout" по некоторому условию, которое удовлетворяет вашей программной логике.

  • 0
    Мне нужно использовать setInterval?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню