Функция не работает на setInterval - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь обновить значения в таблице, извлеченной из MySQL, но функция не запускается повторно?

В качестве альтернативы, если есть другое решение, позволяющее мне обновлять значения из базы данных MySQLна 60-секундном интервале, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: ошибка была устранена, но теперь я получаю новую ошибку, вместо замены значения mysql в ячейке таблицы, он добавляет новые ячейки в таблицу, какая частькод должен быть изменен или добавлен, чтобы решить эту проблему?

Код ниже не возвращает ошибок:

<script type="text/javascript">
$(document).ready(function(){
console.log(1+0);
$.ajax({
    url: 'fetch.php',
    type: 'get',
//type: 'post',
    dataType: 'JSON',
    success: function(response){
        var len = response.length;
        for(var i=0; i<len; i++){
            var beacon = response[i].beacon;
            var location = response[i].location;


            var tr_str = "<tr>" +
                "<td align='center'>" + beacon + "</td>" +
                "<td align='center'> <span class='minutes'>00</span>:<span class='seconds'>00</span> </td>" +
                "</tr>";

            $("#userTable tbody").append(tr_str);
        }
    setInterval(updateTable, 10000);
}
    })
})

        function updateTable() {
                    console.log(1+1);
$.ajax({
    url: 'fetch.php',
    type: 'get',
//type: 'post',
    dataType: 'JSON',
    success: function(response){
        var len = response.length;
        for(var i=0; i<len; i++){
            var beacon = response[i].beacon;
            var location = response[i].location;


            var tr_str = "<tr>" +
                "<td align='center'>" + beacon + "</td>" +
                "</tr>";

            $("#userTable tbody").append(tr_str);
            }

}
});
};

</script>

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Похоже, вы звоните setInterval(updateTable) из внутри updateTable.

Вы не звоните updateTable из любого места снаружи из updateTable, что означает, что функция никогда не выполняется, а setInterval никогда не выполняется.

Чтобы исправить, либо:

  1. Поместите setInterval снаружи из updateTable или
  2. Добавьте updateTable() в конец вашего скрипта.

Я рекомендую первый.

0 голосов
/ 27 февраля 2019

Вместо использования setInterval,

setInterval(updateTable, 10000);

попробуйте использовать setTimeout после обработки и обновления таблицы:

function updateTable() {
  $.ajax({
    ...
    ,complete: function(data){
       // do something
       setTimeout(updateTable, 10000);
    ...
  });
}

Это позволит вашему коду ждатьчтобы информация поступила до того, как сделать другой запрос, и не будет считаться DoS-атакой.

Дайте мне знать, работает ли это для вас или нет.Мы можем попробовать что-то еще.

0 голосов
/ 27 февраля 2019

Если вы отформатируете это хорошо, вы увидите, что вы setInterval внутри вашей функции ... Вы должны поместить ее в функцию обратного вызова $(document).ready.

$(document).ready(function () {
  $.ajax({
    url: 'fetch.php',
    type: 'get',
//type: 'post',
    dataType: 'JSON',
    success: function (response) {
      var len = response.length;
      for (var i = 0; i < len; i++) {
        var beacon = response[i].beacon;
        var location = response[i].location;


        var tr_str = "<tr>" +
            "<td align='center'>" + beacon + "</td>" +
            "<td align='center'> <span class='minutes'>00</span>:<span         class='seconds'>00</span> </td>" +
            "</tr>";

        $("#userTable tbody").append(tr_str);
      }
      // <===== You should place youre set interval here
    }
  })
});

function updateTable() {
  console.log(1 + 1);
  $.ajax({
    url: 'fetch.php',
    type: 'get',
//type: 'post',
    dataType: 'JSON',
    success: function (response) {
      var len = response.length;
      for (var i = 0; i < len; i++) {
        var beacon = response[i].beacon;
        var location = response[i].location;


        var tr_str = "<tr>" +
            "<td align='center'>" + beacon + "</td>" +
            "</tr>";

        $("#userTable tbody").append(tr_str);
      }

    }
  });
  var updateTableInterval = setInterval(updateTable, 10000);
}
...