如何在ajax外部访问dataTable变量

时间:2017-11-16 11:29:12

标签: javascript jquery ajax datatables

我有一个在函数调用中创建的数据表。但是如果我想基于event listeners like this创建新行,则会给出一个错误,即表变量未定义,这是可以理解的,因为它在函数调用内而不是全局变量。那么如何为此创建变通方法并在$(document).ready()部分下添加事件侦听器?

我的JS文件的结构非常简陋,但请不要因为它本来就是这样而投票。

$(document).ready(function()
{
     var table=null;
     $('#button').click(function()
     {
         callfunction1();
     }
     callfunction1()
     {
         $.ajax({
              'success': function(response) //response contains the plain table
                         {
                             createDatatable(response)
                         }
         })
     }
     createDatatable(response)
     {
            $('#division').html(response); //creating the plain table
            table=$('#tableId').Datatable({}); //converting it to datatable
     }
     //I want to add event listeners here, because if I add it anywhere else, it doesn't work, because basically its a function call.
}

我希望我得到一个解决这个面条代码的答案。

由于

3 个答案:

答案 0 :(得分:1)

您可以在更广泛的范围内创建table var的实例,例如:

//the table is now a window object variable window.table
var table = null;
$(document).ready(function()
{
     $('#button').click(function()
     {
         callfunction1();
     }
     callfunction1()
     {
         $.ajax({
              'success': createDatatable()
         })
     }
     createDatatable()
     {
            table=$('#tableId').Datatable({})
     }

     //the table is binded in the window scope so you can use in your event listeners
}

答案 1 :(得分:0)

如果您选择一个var table声明并删除其他

,则以下内容应该有效
var table; //accessible everywhere
$(document).ready(function()
{
     var table; //accessible anywhere in this function
     $('#button').click(function() {
         callfunction1();
     }); //); were missing

     function callfunction1 ()
     {
         $.ajax({
              'success': createDatatable //no () here, you want to pass a function, not the result of a function call
         });
     }

     function createDatatable()
     {
            table=$('#tableId').Datatable({});
     }

}

这应该没有错误,但我不确定这是否是您想要做的。

答案 2 :(得分:0)

所以在你的所有答案(我非常感激)之后,我找到了一个不同的方法。 As per documentation here,我添加了$.ajax({}_.done()(这与访问ajax调用之外的dataTable变量一样好)函数来托管我的事件监听器以访问我的dataTable。

再一次,我感谢大家的答案。 编辑:根据要求提供正确的解决方案。

$(document).ready(function()
{
     var table=null;
     $('#button').click(function()
     {
         callfunction1();
     }
     callfunction1()
     {
         $.ajax({
              'success': function(response) //response contains the plain table
                         {
                             createDatatable(response)
                         }
         }).done(function()
         {
                 //add event listener here,You can access the table variable here. but you can not access the variable outside, instead just pass the variable to another function.
                 console.log(table);//this will work.
         });
     }
     createDatatable(response)
     {
            $('#division').html(response); //creating the plain table
            table=$('#tableId').Datatable({}); //converting it to datatable
     }
}