Как получить данные в jquery dataTable с отправкой формы

Я вставляю данные с помощью jquery Ajax, используя отправку формы, и извлекаю данные в dataTable после отправки формы, следующий код выдает предупреждение DataTables: table id = mainTable - запрошен неизвестный параметр «1» для строки 0, столбца 1. . . . .

var mainTable = $('.mainTable').DataTable();
$('#Form').submit(function(e) {
  e.preventDefault();
  var form = $(this).serialize();
    $.ajax({
        url: "result.php",
        type: "post",
        data: form 
  }).done(function (data) {
        mainTable .clear().draw();
        mainTable .rows.add(data).draw();
        }).fail(function (jqXHR, textStatus, errorThrown) { 
        });
});

HTML

<div class = "content">
    <!-- form start -->
    <form method = "post" id = "Form">     

            <input type = "text" name = "id">
            <input type = "text" name = "name">
            <input type = "text" name = "class">

        <button type = "submit">submit</button>
    </form> 


<table id = "mainTable" class = "mainTable table table-striped">
  <thead>
    <tr>
      <th>Roll No</th>
      <th>Name</th>
      <th>class</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
</div>

PHP

$id = $_POST['group_id'];
$rollno = $_POST['roll_no'];
$name = $_POST['name'];
$class = $_POST['class'];

$insert = "insert into students (roll_no,group_id,name,class) values(:roll_no,:id,:name,:class)";
$insert = $db->prepare($insert );
$insert ->bindParam(':roll_no',$rollno);
$insert ->bindParam(':id',$id );
$insert ->bindParam(':name',$name);
$insert ->bindParam(':class',$class);
$insert ->execute();

$fetch = "SELECT roll_no,name,class FROM students where group-id=:id";
$fetch = $db->prepare($fetch );
$fetch ->bindParam(':id',$id);
$fetch ->execute();

$output = array('data' => array());
while($row = $fetch ->fetch(PDO:: FETCH_OBJ)) {

    $id = $row->roll_no;
    $name = $row->name;
    $class = $row->class;
$output['data'][] = array( $id,$name,class);    
} // /while 

echo json_encode($output);

Это сложно воспроизвести без примера ответа JSON. Но мое дикое предположение заключается в том, что ошибка заключается в том, что вы помещаете массив записей в атрибут data. Пробовали ли вы вместо этого использовать mainTable.rows.add(data.data).draw();? Если он все еще не работает, вы можете опубликовать пример ответа JSON.

Yohanes Gultom 25.05.2019 15:14

@YohanesGultom выдает ошибку Uncaught TypeError: Cannot read property 'length' of undefined at s.<anonymous> с mainTable.rows.add(data.data).draw();.

lipon 25.05.2019 16:08

Поскольку вы не предоставили никаких дополнительных данных, я сделаю еще одно дикое предположение: ответ json не анализируется автоматически из-за отсутствия заголовка. В таком случае вы хотите попробовать data = JSON.parse(data);mainTable.rows.add(data.data).draw();

Yohanes Gultom 25.05.2019 16:32

@YohanesGultom вот и все, теперь все работает, спасибо.

lipon 25.05.2019 19:14
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
1 431
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Moved from comment

Основная причина просто в том, что jQuery ajax() не анализирует ответ JSON от result.php. Самое простое решение — разобрать его внутри done():

data = JSON.parse(data);
mainTable.rows.add(data.data).draw();

Другое решение — правильно указать вернуть заголовок JSON в result.php. Строка data = JSON.parse(data) в done() также должна быть опущена:

header('Content-Type: application/json');
echo json_encode($output);

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