私は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リクエストの結果に関係なく常にトリガーされます)。
コードとデモについては this jsFiddle を参照してください。
これを試してください:
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.getJSON( sSource, aoData, function (json) {
fnCallback(json)
}).complete(function(){update_editable(););
}