Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在原型中对AJAX请求使用自己的回调方法_Javascript_Ajax_Datatable_Prototypejs_Yui - Fatal编程技术网

Javascript 在原型中对AJAX请求使用自己的回调方法

Javascript 在原型中对AJAX请求使用自己的回调方法,javascript,ajax,datatable,prototypejs,yui,Javascript,Ajax,Datatable,Prototypejs,Yui,我已经重构了工作代码以使用适当的对象,现在我无法让Prototype的AJAX.Request正常工作。代码如下,它在YUI的DataTable上下文中工作: SearchTable.prototype.setTableColumns = function (transport) { this.dataTableColumns = transport.responseText.evalJSON(); this.dataTableCallback(); }; Search

我已经重构了工作代码以使用适当的对象,现在我无法让Prototype的AJAX.Request正常工作。代码如下,它在YUI的DataTable上下文中工作:

SearchTable.prototype.setTableColumns = function (transport) {
      this.dataTableColumns = transport.responseText.evalJSON();
      this.dataTableCallback();
};

SearchTable.prototype.setTableConfiguration = function (transport) {
  this.dataTableConfiguration = transport.responseText.evalJSON();
  this.dataTableCallback();
};

SearchTable.prototype.show = function () {
  ....
  new Ajax.Request(this.dataProxy, {
    method: 'get',
    parameters: {
      format: 'json',
      param: 'columns'
    },
    onSuccess: this.setTableColumns
  });

 new Ajax.Request(this.dataProxy, {
   method: 'get',
   parameters: {
     format: 'json',
     param: 'configuration'
   },
   onSuccess: this.setTableConfiguration
  });
}
};

 SearchTable.prototype.dataTableCallback = function () {
        ....
 }
我的问题是,
dataTableCallback
从未被调用。显然,它抛出了一个异常,
this
是未定义的,我可以理解:在对象上下文中不调用回调,因此从未分配
this
。我尝试过用现金回电,但失败了

问题是:我如何才能做到这一点?

试试这个:

onSuccess: this.setTableColumns.bind(this)
试试这个:

onSuccess: this.setTableColumns.bind(this)
为“this”创建一个闭包:

为“this”创建一个闭包:


谢谢,将
这个
分配给其他东西是关键。不过,您和Cédric的解决方案相结合是最好的。不过,我认为在这个示例中,您不必将这个分配给其他东西。由于setTableColumn是作为此方法调用的,因此在其主体中进行设置。这和使用bind()是一样的,但是稍微少一点:)我有时候太笨了。很抱歉前面的评论Greg,它太傻了。谢谢,把
这个
分配给其他东西是关键。不过,你和Cédric的解决方案结合起来是最好的。不过,我认为在这个例子中,你不必把它分配给其他东西。由于setTableColumn是作为此方法调用的,因此在其主体中进行设置。这和使用bind()是一样的,但是稍微少一点:)我有时候太笨了。对不起,前面的注释Greg,它是哑的。
transport
变量仍然可用吗?是的,它作为setTableColums的第一个参数。
transport
变量仍然可用吗?是的,它作为setTableColums的第一个参数。