声明的函数未被调用

时间:2015-03-02 10:31:40

标签: jquery ajax

我有一个从后端获取数据的函数。一旦数据加载,我正在调用一个以callback发送的函数。但我收到错误为undefined not a function

这是代码:

var initDataTable = function () {

      var getDableData = function (url,callback) {
            $.getJSON(url)
              .then(function (data) {
                callback(data);
            });
      };

      return {

        init : function (dataAssests) {
          this.container = dataAssests.container;
          this.headerNames = dataAssests.names;          
          getDableData(dataAssests.url, this.dataReceiver); //getting required data
        },

        dataReceiver : function (data) {
            this.tableData = data;
            this.tableMaker(); //not calling error Uncaught TypeError: undefined is not a function.
        },

        tableMaker : function () {
          console.log(this.tableData);
        }

      };
};

//tabular data starts...
var dataAssests = {
                    container: $('.dataTable'), 
                    url : 'https://tcs.firebaseio.com/d/DocPageDetails/d/Organizations.json', 
                    names : ['Organization Name', 'Zip Code', 'Telephone', 'Organization TypeName' ]
                  };

var dataTableFrist = initDataTable().init(dataAssests);
//tabular data ends...

jsfiddle

1 个答案:

答案 0 :(得分:1)

问题不在于回调未定义,而是在dataReceiver内,this并未将对象指向您所期望的内容。

由于您在没有上下文的情况下调用callbackthis内的dataReceiver指的是window对象,因此this.tableMaker未定义,因此错误。

一种可能的解决方案是使用Function.bind()将自定义执行上下文传递给回调方法

getDableData(dataAssests.url, this.dataReceiver.bind(this));

演示:Fiddle