Как использовать плагин jQuery Datatable из остальных API json?

Я хочу получить все json из данных https://swapi.co/api/planets/?format=json с помощью REST API и плагина jQuery DataTable, но моя проблема в том, что он сначала загружает данные, но когда я начинаю вводить текст в поле поиска, предоставленное Datatable, он говорит «Данные отсутствуют в таблице».

Я искал эту подобную проблему, но я все еще не могу найти решение. То, что я пробовал, это

Мой HTML-файл:

отдых.html


<table id = "tableSwapi" class = "table table-striped">
         <thead>
            <tr>
                <th>Name</th>
                <th>Rotation Period</th>
                <th>Orbital Period</th>
                 <th>Diameter</th>
                 <th>Climate</th>
                 <th>Gravity</th>
                 <th>Terrain</th>
                 <th>Water Surface</th>
                 <th>Population</th>
            </tr>
         </thead>
         <tbody id = "list-list">

         </tbody>
</table>

Мой файл сценария:

script.js

$(document).ready(function () {
 $("#tableSwapi").dataTable();

$.ajax({
        url: 'https://swapi.co/api/planets/',
        type: 'get',
        dataType: 'json',
        success: function (result) {
            let daftar = result.results;
            var html = '';
            $.each(daftar, function (i, data) {             
                html += `<tr>
                            <td> ` + data.name + `</td>
                            <td>` + data.rotation_period + `</td>
                            <td>` + data.orbital_period + `</td>
                            <td>` + data.diameter + `</td>
                            <td> ` + data.climate + ` </td>
                            <td> ` + data.gravity + ` </td>
                            <td>` + data.terrain + `</td>
                            <td> ` + data.surface_water + `</td>
                            <td> ` + data.population + ` <br></td>
                        </tr>`;

                //This is selector of my <tbody> in my table
                $("#list-list").html(html);
            });
        }
    });
})

Любая помощь приветствуется. Спасибо.

Было бы лучше вставить сами данные через API Datatable, а затем попросить его перерисовать. Если вы вставляете html самостоятельно, плагин не знает, что что-то изменилось. Он хранит состояние таблицы внутри, чтобы знать, какие строки отображать на основе сортировки, нумерации страниц, поиска и т. д.

charlietfl 23.03.2019 11:16

Где вы инициализируете данные в своем коде?

Priyank Panchal 23.03.2019 11:52

Извините, я только что отредактировал код скрипта. ну вот.

Ibrahim Ahmad 23.03.2019 11:53

@charlietfl хорошо, спасибо, я понял это, поэтому сначала я пошел загружать ajax, а затем я загрузил DataTable() внутри функции setTimeout(), поэтому я дал время, чтобы DataTable знал, есть ли данные строки в таблице.

Ibrahim Ahmad 24.03.2019 06:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
4
4 813
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я использовал ваш пример, и он работает правильно.

<!DOCTYPE html>
<html>
<head>
    <meta charset = "utf-8" />
    <title></title>
    <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    <link href = "https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel = "stylesheet" />
    
</head>
<body>
    <table id = "tableSwapi" class = "table table-striped">
        <thead>
            <tr>
                <th>Name</th>
                <th>Rotation Period</th>
                <th>Orbital Period</th>
                <th>Diameter</th>
                <th>Climate</th>
                <th>Gravity</th>
                <th>Terrain</th>
                <th>Water Surface</th>
                <th>Population</th>
            </tr>
        </thead>
        <tbody id = "list-list"></tbody>
    </table>    
    <script
  src = "http://code.jquery.com/jquery-3.3.1.min.js"
  integrity = "sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8 = "
  crossorigin = "anonymous"></script>
    <script src = "https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
    
    <script>
        $(document).ready(function () {
            $("#tableSwapi").dataTable();

            $.ajax({
                url: 'https://swapi.co/api/planets/',
                type: 'get',
                dataType: 'json',
                success: function (result) {
                    let daftar = result.results;
                    var html = '';
                    $.each(daftar, function (i, data) {
                        html += `<tr>
                                        <td> ` + data.name + `</td>
                                        <td>` + data.rotation_period + `</td>
                                        <td>` + data.orbital_period + `</td>
                                        <td>` + data.diameter + `</td>
                                        <td> ` + data.climate + ` </td>
                                        <td> ` + data.gravity + ` </td>
                                        <td>` + data.terrain + `</td>
                                        <td> ` + data.surface_water + `</td>
                                        <td> ` + data.population + ` <br></td>
                                    </tr>`;

                        //This is selector of my <tbody> in my table
                        $("#list-list").html(html);
                    });
                }
            });
        })


    </script>
</body>
</html>

Возможно, проблема с плагином Datatable. Пожалуйста, проверьте элементы проверки.

Поле поиска работает? Я запустил фрагмент кода, он сначала загружает данные. но когда я начал использовать поле поиска, проблема все та же, такая же, как и при нажатии на столбец сортировки.

Ibrahim Ahmad 23.03.2019 16:13

хорошо, спасибо, я понял это, поэтому я сначала загрузил ajax, а затем я загрузил DataTable() внутри функции setTimeout(), поэтому я дал время, чтобы DataTable знал, есть ли строки данных в Таблица.

Ibrahim Ahmad 24.03.2019 06:41

Если вы можете использовать скрипт на стороне сервера, попробуйте код, например

PHP-код ajax.php

$url = "https://swapi.co/api/planets/?page = ".($_GET['start']/$_GET['length']+1); 
if (isset($_GET['search']) && !empty($_GET['search'])) {
    $url .= "&search = ".$_GET['search']['value'];
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url);
$result = json_decode(curl_exec($ch),true);
$array = array
        (
            "draw" => $_GET['draw'],
            "recordsTotal" => $result['count'],
            "recordsFiltered" => $result['count'],
            "data" => $result['results'],
        );
echo json_encode($array);

Код Jquery с данными

$('#tableSwapi').DataTable({
    "processing": true,
    "serverSide": true,
    "sPaginationType": "full_numbers",
    "order": [],
    "ajax": {
        "url": "ajax.php",
        "type": 'get',
        "dataType": 'json'
    },
    "columns": [
        { "data": "name" },
        { "data": "rotation_period" },
        { "data": "orbital_period" },
        { "data": "diameter" },
        { "data": "climate" },
        { "data": "gravity" },
        { "data": "terrain" },
        { "data": "surface_water" },
        { "data": "population" },
    ]
});

Да, спасибо, но я пытаюсь не использовать сценарий на стороне сервера. Как вы думаете, есть ли возможность без использования сценария на стороне сервера. Не могли бы вы снова поделиться своим ответом? Я ценю это, приятель.

Ibrahim Ahmad 23.03.2019 16:15

Если вы знаете все об этом API, не могли бы вы сообщить мне, как вы можете получить всю запись сразу с помощью ajax. прямо сейчас он предоставляет 10 записей на запрос.

Harshwardhan Sharma 26.03.2019 06:44

Другие вопросы по теме