web-dev-qa-db-fra.com

Datatables TypeError: c est indéfini

J'essaie d'utiliser jQuery DataTables mais j'obtiens l'erreur

TypeError: c est indéfini

Je ne sais pas ce qui ne va pas avec mon code car je peux voir que le JSON est correctement récupéré et que le format est correct aussi, mais je ne sais pas ce qui ne va pas avec ce message, mais l'erreur ci-dessus est apparue.

Mon JSON:

{"Data":[{"LOGIN":10184},{"LOGIN":10214},{"LOGIN":10180},{"LOGIN":10187},{"LOGIN":10179},{"LOGIN":10280},{"LOGIN":201},{"LOGIN":10238},{"LOGIN":10296},{"LOGIN":10312}]}

et mon code DataTables:

$(document).ready(function() {
    $('#tablename').dataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "type": "POST",
        "url": "https://test.com/api/db/select",
        "data": function ( json ) {  return JSON.stringify( { "Sql": 12 } );},
        "contentType": "application/json; charset=utf-8",
        "dataType": "json",
        "processData": true,
            beforeSend : function(xhr){
                        var access_token = sessionStorage.getItem('access_token');
                        xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);
            }
        },
        "dataSrc": "Data",
        "columns": [
            { "data": "LOGIN" }
        ]
    } );
} );
37
Ali Mahmoudi

dataSrc est une option ajax spéciale pour dataTables, qui devrait être incluse dans l'objet ajax:

"ajax": {
    "dataSrc": "Data", //<--- place dataSrc here instead
    "type": "POST",
    ...
}

Vous l'avez placé en dehors de ajax, et par ce que dataTables n'a aucune idée de la source à utiliser (à part essayer aveuglément la réponse ajax) ou de l'endroit où LOGIN appartient.

6
davidkonrad

Vérifiez si vous avez ajouté

<thead></thead>

<tbody></tbody>

J'ai résolu ce problème en ajoutant ceux-ci.

Donc, fondamentalement, la structure doit être comme:

<table>
 <thead>
  <tr>
   <th></th>
   <th></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td></td>
   <td></td>
  </tr>
 </tbody>
</table>
84

Parfois, ce problème de type survient en corrigeant les colonnes incompatibles/inégales avec les colonnes HTML et datatables.

"columns": [
        null,
        null,
        null,
        {"orderable": false, "width":"2%"},
    ],

Au-dessus, javascript définit 4 colonnes et HTML à 5 colonnes

<tr>
   <td>A</td>
   <td>B</td>
   <td>C</td>
   <td>D</td>
   <td>E</td>
</tr>

Par conséquent, vous devrez corriger/égaler les configurations HTMl et Datatable des deux côtés.

"columns": [
        null,
        null,
        null,
        null, //Added New
        {"orderable": false, "width":"2%"},
    ],
12
Raju Rajpurohit

dans mon cas, je devais supprimer l'attribut colspan d'un th à l'intérieur de la tête et supprimer l'erreur;

4
Qasim Ali

Dans mon cas, j'ai eu la même erreur parce que j'ai utilisé la fonction ajax.dataSrc (data) pour manipuler les données. Mais après cela, j'ai oublié de renvoyer les données.

"dataSrc": function ( json ) {
  for ( var i=0, ien=json.data.length ; i<ien ; i++ ) {
      //somethings...
  }
  return json.data;// I forgot this line, then i got the error "TypeError: c is undefined"
}

Après quelques minutes, j'ai vérifié la documentation de la fonction ajax.dataSrc et j'ai remarqué que je n'avais pas le retour:

Retourne: array . Tableau de données que DataTables doit utiliser pour dessiner la table

J'espère que vous n'avez pas la même distraction ...

1
MrMojoRisin

Dans mon cas, données manquantes dans le résultat de retour côté serveur.

//Javascript
$('#table').DataTable({
        sAjaxSource: '/load',
        aoColumns: [
         ...
        ],
});
//server side(in Rails)
render json: {'aaData'=>data}
0
hobbydev