Ответ 1
Другой вариант - использовать fnDrawCallback, который вызывается после каждого события ничьей. Что будет сделано после каждого запроса ajax.
"fnDrawCallback" : function() {
update_editable();
}
Я использую 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, чтобы также был вызван исходный обратный вызов?
Другой вариант - использовать fnDrawCallback, который вызывается после каждого события ничьей. Что будет сделано после каждого запроса ajax.
"fnDrawCallback" : function() {
update_editable();
}
Попробуйте следующим образом:
"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);
, включая вызов функции.
С 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).
Смотрите этот jsFiddle для кода и демонстрации.
Попробуйте следующее:
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.getJSON( sSource, aoData, function (json) {
fnCallback(json)
}).complete(function(){update_editable(););
}