Javascript 使用函数调用DataTable并在单击时获取TD数据,但收到一个错误";无法读取属性';0';“未定义”的定义;

Javascript 使用函数调用DataTable并在单击时获取TD数据,但收到一个错误";无法读取属性';0';“未定义”的定义;,javascript,jquery,datatable,datatables,Javascript,Jquery,Datatable,Datatables,我在获取表上的数据时遇到问题,但收到此错误“无法读取未定义的的属性“0” 我想要的是,当我单击表的时,它假定会获得数据 这段代码运行良好,并得到了结果 var my_table= jQuery('#my_table').DataTable({ "lengthChange": false, "autoWidth": false, "searching": true, "ordering": false,

我在获取表上
的数据时遇到问题,但收到此错误“无法读取未定义的的属性“0”

我想要的是,当我单击表的
时,它假定会获得
数据

这段代码运行良好,并得到了结果

  var my_table= jQuery('#my_table').DataTable({
         "lengthChange": false,
         "autoWidth": false,
         "searching": true,
         "ordering": false,
         "processing":true,
         "serverSide":true,
         "order":[],
         "ajax":{
           url:"admin-ajax.php",
           data:{action:"table_json"},
           type:"POST"
         },
         "columnDefs":[
           {
             "targets":[0],
             "orderable":false,
           },
         ],
  });
jQuery('#my_table tbody').on( 'click', 'tr', function () {
     var data = my_table.row( this ).data() ;
     console.log(data[0]);
} );
但当我将其包装到函数示例中时:

function call_thisTable(ParameterA,ParameterB){
 var my_table= jQuery('#my_table').DataTable({
             "lengthChange": false,
             "autoWidth": false,
             "searching": true,
             "ordering": false,
             "processing":true,
             "serverSide":true,
             "order":[],
             "ajax":{
               url:"admin-ajax.php",
               data:{action:"table_json"},
               type:"POST"
             },
             "columnDefs":[
               {
                 "targets":[0],
                 "orderable":false,
               },
             ],
      });
    jQuery('#my_table tbody').on( 'click', 'tr', function () {
         var data = my_table.row( this ).data() ;
         console.log(data[0]);
    } );
}
然后每次单击“按钮”时,我都会首先销毁表以重新初始化内容并调用此函数
call\u thisTable(a,B)

在我第一次调用
时调用此表(A,B),您将获得所需的数据,但在第二个、第三个等处,您将获得未定义的“无法读取属性“0”错误。

这行代码有点问题

    $('#my_table').DataTable().destroy();
您正在初始化一个数据表,同时销毁它。试着摆脱

    DataTable()
在那行。

感谢@Afdufsko, 来解决这个问题。我在函数外部启动了datatable初始化

var my_table= jQuery('#my_table').DataTable({
             "lengthChange": false,
             "autoWidth": false,
             "searching": true,
             "ordering": false,
             "processing":true,
             "serverSide":true,
             "order":[],
             "ajax":{
               url:"admin-ajax.php",
               data:{action:"table_json"},
               type:"POST"
             },
             "columnDefs":[
               {
                 "targets":[0],
                 "orderable":false,
               },
             ],
      });
function call_thisTable(my_table,ParameterA,ParameterB){
    jQuery('#my_table tbody').on( 'click', 'tr', function () {
         var data = my_table.row( this ).data() ;
         console.log(data[0]); 
         //do some ajax here
    } );
}
然后,我使用了
ajax.reload()
,而不是销毁数据表来启动新内容


创建表时出现问题。该错误特定于columnDefs中的行,“targets:[0],您能向我解释一下吗@Afdusko先生?未捕获的TypeError:$(…)。销毁不是一个函数我修复了我的问题谢谢您指出这一部分,而不是使用
destoy()
我使用
ajax.reload()
var my_table= jQuery('#my_table').DataTable({
             "lengthChange": false,
             "autoWidth": false,
             "searching": true,
             "ordering": false,
             "processing":true,
             "serverSide":true,
             "order":[],
             "ajax":{
               url:"admin-ajax.php",
               data:{action:"table_json"},
               type:"POST"
             },
             "columnDefs":[
               {
                 "targets":[0],
                 "orderable":false,
               },
             ],
      });
function call_thisTable(my_table,ParameterA,ParameterB){
    jQuery('#my_table tbody').on( 'click', 'tr', function () {
         var data = my_table.row( this ).data() ;
         console.log(data[0]); 
         //do some ajax here
    } );
}
jQuery(document).on("click",".click_button",function(){
  var A = jQuery(this).attr("data-a");
  var B = jQuery(this).attr("data-b");

  $('#my_table').ajax.reload();
  call_thisTable(my_table,A,B);
});