Подтвердить что ты не робот

Jquery datatables ajax callback

Я использую jQuery DataTables и делаю серверные данные. Я пытаюсь вызвать функцию, когда возвращается вызов ajax. Я попытался вставить этот fnCallback2, который вызывает мою функцию и исходную функцию, но jQuery просто ошибается (и не говорит мне, что это за ошибка) и пропускает.

$("#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
    });}});

Я также попытался добавить параметр fnInitComplete, но это вызвано только первым, а не после последующих страниц.

"fnInitComplete": function(){
update_editable();
},

Как правильно вызывать мой код после запроса ajax, чтобы также был вызван исходный обратный вызов?

4b9b3361

Ответ 1

Другой вариант - использовать fnDrawCallback, который вызывается после каждого события ничьей. Что будет сделано после каждого запроса ajax.

"fnDrawCallback" : function() {
    update_editable();
}

Ответ 2

Попробуйте следующим образом:

"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)
       } );
}

Затем вы можете делать то, что вы хотите сделать до строки fnCallback(json);, включая вызов функции.

Ответ 3

РЕШЕНИЕ

С DataTables 1.10 существует несколько способов обработки события завершения Ajax.

  • Использование ajax.dataSrc:

    var table = $("#example").DataTable({
         serverSide: true,
         ajax: {
             url: "/test/0",
             dataSrc: function(d){
    
                 // TODO: Insert your code
    
                 return d.data;    
             }
         }
    });
    
  • Использование xhr событие:

    $("#example").on('xhr.dt', function(e, settings, json, xhr){
        // TODO: Insert your code
    });
    
    var table = $("#example").DataTable({
         serverSide: true,
         ajax: {
             url: "/test/0"
         }
    });
    

Есть одно дополнительное преимущество в использовании xhr событие по сравнению с ajax.dataSrc:

По данным DataTables 1.10.7 это событие запускается как с успехом, так и с ошибками, когда запрос Ajax завершен (т.е. он всегда запускается независимо от результата запроса Ajax).

DEMO

Смотрите этот jsFiddle для кода и демонстрации.

Ответ 4

Попробуйте следующее:

"fnServerData": function ( sSource, aoData, fnCallback ) {
    $.getJSON( sSource, aoData, function (json) { 
       fnCallback(json)
}).complete(function(){update_editable(););
}