не может перезагрузить dataTable с новыми данными - PullRequest
0 голосов
/ 12 марта 2019

Я не могу загрузить DataTable с новыми данными, полученными при вызове API.

Ошибки отображаются как:

Предупреждение DataTables: идентификатор таблицы = ведомое устройство- Невозможно повторно инициализировать DataTable.Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/3

Предупреждение DataTables: таблица id = slave - запрошенный неизвестный параметр '0' для строки 0, столбца 0. Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/4

Это мой код Ajax:

$(document).ready( function (){
    $('#slave').dataTable()
    });

    function updateDatTable() {

    fetch('{{route('pusher')}}', {
    method : 'post',
    mode:    'cors',
    headers: {
      'Content-Type': 'application/json',  // sent request
      'Accept':       'application/json'   // expected data sent back
    },
    body: JSON.stringify({"mac":"{{$slaves['mac']}}"})
    })
    .then((res) => res.json())
    .then(function(res) {

        var temp = res['slaves'];
        var table = $('#slave').DataTable({
            "data":temp,
            "columns":[
                    { data: "name" },
                    { data: "slave_id" },
                    { data: "type" },
                    { data: "status" },
                    { data: "value"},
                    { data: "mode"},
                    { data: "name1"},
                    { data: "name2"},
                    { data: "name3"},
                    { data: "name4"},
                    { data: "s1"},
                    { data: "s2"},
                    { data: "s3"},
                    { data: "s4"},
                    { data: "voltage"},
                    { data: "hum"},
                    { data: "temp"}

            ]
        });

            table.clear().rows.add(temp).draw();
            alert('yay');
            //setInterval(updateDatTable, 1000);

    })
    .catch(function(error) {
        alert(error)
            //setInterval(updateDatTable, 1000); // <-- there was a network problem, 
                            //     but still, program the next one!
    })

    }

Данные, которые я получаю от вызова API, следующие:

{
    "slaves": [
        {"name":"IPL Conf Room Door","type":"door_sensor","value":0,"slave_id":3,"status":1,"voltage":2},

        {"slave_name":"IPL Motion Sensor","name":"IPL Motion Sensor","type":"PIR","value":1,"slave_id":4,"status":1,"voltage":2},

        {"hum":83,"temp":22,"name":"IPL Conf Room Extension","type":"ir_relay","slave_id":5,"status":1,"voltage":10},

        {"mode":4,"name":"IPL Scene Switch","type":"macro_panel","slave_id":6,"status":1,"voltage":0},

        {"mode":3,"s3":1,"name3":"","name":"IPL Conf Lights","type":"fb","name2":"","name1":"","s1":1,"slave_id":7,"s2":1,"status":1},

        {"hum":84,"temp":23,"name":"IPL Reception Extension","type":"ir_relay","slave_id":9,"status":1,"voltage":10},

        {"name":"IPL Main Door","type":"door_sensor","value":1,"slave_id":10,"status":1,"voltage":2}
    ],

    "amount":7,

    "ack":"ok",

    "action":"list_slave",

    "type":"all",

    "mac":"C8EEA62DA254"
}

, пожалуйста, помогите.если вам нужна дополнительная информация, просто спросите.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Попробуйте использовать это как таблицу

var table = $('#slave').DataTable({
    "data": temp,
    destroy: true, // <----- notice "destroy: true"
    "columns": [
        { data: "name" },
        { data: "slave_id" },
        { data: "type" },
        { data: "status" },
        { data: "value" },
        { data: "mode" },
        { data: "name1" },
        { data: "name2" },
        { data: "name3" },
        { data: "name4" },
        { data: "s1" },
        { data: "s2" },
        { data: "s3" },
        { data: "s4" },
        { data: "voltage" },
        { data: "hum" },
        { data: "temp" }

    ]
});
0 голосов
/ 12 марта 2019

Ваша таблица данных инициализируется дважды, поэтому добавьте флаг

"destroy" : true,

после «data»: temp или в любом другом подходящем месте, чтобы уничтожить ранее инициализированную таблицу данных в вашей функции JavaScript updateDatTable ().

...