Javascript jQuery数据表ajax回调

Javascript jQuery数据表ajax回调,javascript,jquery,datatables,jquery-events,Javascript,Jquery,Datatables,Jquery Events,我正在使用jQuery数据表并处理服务器端数据。我试图在ajax调用返回时调用函数。我尝试插入这个调用我的函数和原始函数的fnCallback2,但是jQuery只是抛出一个错误(并且没有告诉我错误是什么)并跳过 $("#brands").dataTable( { "bServerSide" : true, "sAjaxSource" : "ajax.php", "fnServerData" :

我正在使用jQuery数据表并处理服务器端数据。我试图在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请求后正确调用代码,以便调用原始回调?

尝试以下方法:

"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)之前做任何您想做的事情行-包括调用函数。

另一个选项是使用在每次绘图事件后调用的。这将在每个ajax请求之后完成

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

试试这个:

"fnServerData": function ( sSource, aoData, fnCallback ) {
    $.getJSON( sSource, aoData, function (json) { 
       fnCallback(json)
}).complete(function(){update_editable(););
}
解决方案 对于DataTables 1.10,有多种方法可以处理Ajax完成事件

  • 使用选项:

    var table=$(“#示例”).DataTable({
    服务器端:是的,
    阿贾克斯:{
    url:“/test/0”,
    dataSrc:函数(d){
    //TODO:插入您的代码
    返回数据;
    }
    }
    });
    
  • 使用事件:

    $(“#示例”).on('xhr.dt',函数(e,settings,json,xhr){
    //TODO:插入您的代码
    });
    var table=$(“#示例”).DataTable({
    服务器端:是的,
    阿贾克斯:{
    url:“/test/0”
    }
    });
    
使用事件与选项相比有一个额外的优势:

从DataTables 1.10.7开始,当Ajax请求完成时,成功和错误条件都会触发此事件(即,无论Ajax请求的结果如何,始终会触发此事件)

演示
有关代码和演示,请参阅。

我已经看过了,但它强制执行GET,并且我可能会将大量数据传递回服务器。“我想坚持使用POST。”博巴德利更新了我的答案-在测试后,它不起作用。它看起来与我在原始问题中发布的内容相同。不过,谢谢你。这真是太有魅力了!然而,它每次都会触发AJAX函数,比如jQueryUI对话框,所以在这里分享一下,如果要绑定一个函数,首先需要解除绑定事件才能工作。。IE:“fnDrawCallback”:函数(){$(“#ask_container”).find('a[href^=“includes/view”].t3_txt').unbind(“click”);$(“#ask#container”).find('a[href^=“includes/view”].t3_txt')。on(“click”,函数(b){b.preventDefault();var ce=$(this.attr(“href”)…函数的其余部分在这里!键(以前是
fnDrawCallback
)现在是(自:1.10)。此外,该函数接收一个
settings
对象作为第一个参数。@basic6尽管文档中说
settings
对象不是可选的,但不传递任何内容也可以。知道原因/方法吗?@Sterex:passing nothing?DataTables会将该设置对象传递给回调。是否使用它取决于您自己。