Je comprends cela comme un problème populaire et j'ai lu toutes les questions similaires ici sur Stack Overflow et sur d'autres sites (y compris le site Web Datatables).
Pour clarifier, j'utilise
Je me suis également assuré que j'avais bien reçu le tableau JSON:
[{"name_en":"hello","phone":"55555555"},{"name_en":"hi","phone":"00000000"}]
Mon tableau HTML ressemble à ceci:
<table id="customer_table">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
</thead>
</table>
Et voici ma fonction document.ready
:
$(document).ready(function(){
//$('#customer_table').DataTable();
$('#customer_table').DataTable( {
"ajax": 'json',
"dataSrc": "",
"columns": [
{ "data": "email" },
{ "data": "name_en" }
]
});
});
L'erreur que je reçois est
Uncaught TypeError: Impossible de lire la propriété 'longueur' de non définie
OK, merci à tous pour l'aide.
Cependant, le problème était beaucoup plus facile que cela.
Tout ce que je dois faire est de corriger mon JSON pour affecter le tableau à un attribut appelé data, comme suit.
{
"data": [{
"name_en": "hello",
"phone": "55555555",
"email": "a.shouman",
"facebook": "https:\/\/www.facebook.com"
}, ...]
}
C'est encore plus simple: utilisez simplement l'option dataSrc:''
dans la définition ajax pour que dataTable sache s'attendre à un tableau plutôt qu'à un objet:
$('#pos-table2').DataTable({
processing: true,
serverSide: true,
ajax:{url:"pos.json",dataSrc:""}
}
);
Voir options ajax
Essayez comme suit le retour doit être d, pas d.data
ajax: {
"url": "xx/xxx/xxx",
"type": "GET",
"error": function (e) {
},
"dataSrc": function (d) {
return d
}
},
Cette erreur TypeError: Cannot read property 'length' of undefined
signifie généralement que jQuery DataTables ne peut pas trouver les données dans la réponse à la demande Ajax.
Par défaut, jQuery DataTables s'attend à ce que les données soient dans l'un des formats indiqués ci-dessous. Une erreur se produit car les données sont renvoyées dans un format autre que celui par défaut.
Tableau de tableaux
{
"data": [
[
"Tiger Nixon",
"System Architect",
"$320,800",
"2011/04/25",
"Edinburgh",
"5421"
]
]
}
Tableau d'objets
{
"data": [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": "$320,800",
"start_date": "2011/04/25",
"office": "Edinburgh",
"extn": "5421"
}
]
}
Utilisez le format par défaut ou utilisez ajax.dataSrc
pour définir la propriété de données contenant les données de table dans la réponse Ajax (data
par défaut).
Voir Emplacement du tableau de données pour plus d'informations.
Voir jQuery DataTables: Erreurs de console JavaScript communes pour plus de détails.
Lorsque vous avez des données JSON, l'erreur suivante apparaît
Une meilleure solution consiste à attribuer un var data
à l’objet tableau json local, les détails .__ voir: https://datatables.net/manual/tech-notes/4
Ceci vous aide à afficher le contenu de la table.
$(document).ready(function(){
$('#customer_table').DataTable( {
"aaData": data,
"aoColumns": [{
"mDataProp": "name_en"
}, {
"mDataProp": "phone"
}, {
"mDataProp": "email"
}, {
"mDataProp": "facebook"
}]
});
});
Si vous utilisez ajax en tant que fonction, rappelez-vous que les données JSON doivent y être retournées, avec les paramètres définis.
$('#example').dataTable({
"ajax" : function (data, callback, settings) {
callback({
data: [...],
recordsTotal: 40,
recordsFiltered: 40}
));
}
})
Tandis que les réponses ci-dessus décrivent bien la situation, vérifiez le navigateur vraiment ainsi que le format attendu par DataTables. Il y a peut-être d'autres raisons de ne pas obtenir la data
. Par exemple, si l'utilisateur n'a pas accès à l'URL de données et obtient du code HTML à la place. Ou le système distant a mis en place des "corrections" malheureuses. L'onglet Réseau des outils de débogage du navigateur aide.
Dans mon cas, je devais assigner mon json à un attribut appelé aaData comme dans Datatables exemple ajax dont les données ressemblaient à this .