Javascript jQuery数据表ajax回调
我正在使用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" :
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会将该设置对象传递给回调。是否使用它取决于您自己。