jquery datatables ajax de rappel
j'utilise jQuery DataTables et je fais des données côté serveur. J'essaie d'appeler une fonction quand l'appel ajax revient. J'ai essayé d'insérer ce fnCallback2 qui appelle ma fonction et la fonction d'origine, mais jQuery ne fait qu'annuler une erreur (et ne me dit pas ce qu'est l'erreur).
$("#brands").dataTable( {
"bServerSide" : true,
"sAjaxSource" : "ajax.php",
"fnServerData" : function(sSource, aoData, fnCallback) {
fnCallback2 = function(a,b,c){
fnCallback.call(a,b,c);
update_editable();
};
$.ajax( {
"dataType" : 'json',
"type" : "POST",
"url" : sSource,
"data" : aoData,
"success" : fnCallback2
});}});
j'ai aussi essayé d'ajouter le paramètre fnInitComplete, mais il n'est appelé que la première fois, pas après les pages suivantes.
"fnInitComplete": function(){
update_editable();
},
Comment puis-je appeler correctement mon code après la requête ajax pour que le callback original soit appelé aussi?
4 réponses
une Autre option est d'utiliser le fnDrawCallback qui est appelé après chaque tirage au sort. Ce qui sera fait après chaque requête ajax.
"fnDrawCallback" : function() {
update_editable();
}
Essayer de cette façon :
"fnServerData": function ( sSource, aoData, fnCallback ) {
/* Add some extra data to the sender */
aoData.push( { "name": "more_data", "value": "my_value" } );
$.ajax( {
"dataType" : 'json',
"type" : "POST",
"url" : sSource,
"data" : aoData,
"success" : function(json) {
/* Do whatever additional processing you want on the callback,
then tell DataTables */
fnCallback(json)
} );
}
vous pouvez alors faire ce que vous voulez avant le fnCallback(json);
ligne - y compris l'appel d'une fonction.
SOLUTION
avec DataTables 1.10 il y a plusieurs façons de gérer L'événement D'achèvement Ajax.
en utilisant
ajax.dataSrc
option:var table = $("#example").DataTable({ serverSide: true, ajax: { url: "/test/0", dataSrc: function(d){ // TODO: Insert your code return d.data; } } });
en utilisant
xhr
événement:$("#example").on('xhr.dt', function(e, settings, json, xhr){ // TODO: Insert your code }); var table = $("#example").DataTable({ serverSide: true, ajax: { url: "/test/0" } });
il y a un avantage supplémentaire à utiliser xhr
événement par rapport à ajax.dataSrc
option:
en tant Que des tables de données 1.10.7 cet événement est déclenchée par les conditions de succès et d'erreur lorsque la requête Ajax est terminée (c.-à-d. qu'elle est toujours déclenchée quel que soit le résultat de la requête Ajax).
DEMO
Voir c'jsFiddle pour le code et la démonstration.
Essaye Ceci:
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.getJSON( sSource, aoData, function (json) {
fnCallback(json)
}).complete(function(){update_editable(););
}