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?

19
demandé sur madth3 2011-10-06 00:34:51

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();
}
24
répondu dotjoe 2011-10-05 21:37:50

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.

8
répondu ManseUK 2011-10-05 21:23:24

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.

6
répondu Gyrocode.com 2017-05-19 04:08:59

Essaye Ceci:

"fnServerData": function ( sSource, aoData, fnCallback ) {
    $.getJSON( sSource, aoData, function (json) { 
       fnCallback(json)
}).complete(function(){update_editable(););
}
0
répondu yoku2010 2012-03-27 08:23:41