如何在JavaScript对象中存储回调函数名称并调用

时间:2019-01-10 08:05:00

标签: javascript callback

我正在尝试构建此函数数据,以获取一个JavaScript对象并处理一段时间,它需要一个回调函数,因此我尝试在该对象内部传递该函数,但是当我调用此函数时,它说该函数不存在此函数仍然存在,当我将其作为参数传递时,仅当我从JavaScript对象获取回调函数名称时才会发生这种情况

function Ajax(data){
   //ajax stuff
   var filtered_respons  = response_from_ajax;
     //tryed this all not working
            data['callback'](filtered_response,'loading');
            var fun_name = data['callback'];
            fun_name(filtered_response,'loading');//



 }

已更新

从html页面开始,我将此函数称为

   let data = {
    url:'./assets/php/category.php',
    type:'POST',
    callback :'toprender',
    data:{all_cats:1},
    element_name:'cat'
  }
  Ajax(data);

当我尝试这种方式时,它会起作用

AjaxCaller(data,topfunction,true);

这是整个功能

    AjaxCaller(data,callback,need){
     var loader= "";
     if(typeof data['loader'] !== "undefined"){
        loader = $("#"+data['loader']);
     }else{
        loader = $("#loading"); 
     }
     loader.show();
if(typeof data['url'] !== "undefined" && typeof data['type'] !== "undefined"){
    var $self = this;
    $.ajax({
        url:data['url'],
        type:data['type'],
        data:data['data'],
        success:function(response){
            loader.hide();
            var response = JSON.parse(response);
            var filtered_response = $self.ajaxError(response);
            if(need==true){
               callback(filtered_response,data['element_name']);                

            }

        }


    });




}else{
    console.log('Please Re Check The Objects');
}

 }

1 个答案:

答案 0 :(得分:2)

您正在尝试使用字符串作为函数。你不能那样做。

您可能只想将callback :'toprender'更改为callback :toprender

let data = {
  url:'./assets/php/category.php',
  type:'POST',
  callback :toprender,
  data:{all_cats:1},
  element_name:'cat'
}
Ajax(data);

这会将callback设置为功能,而不是字符串。

实时示例:

function toprender() {
  console.log("toprender called");
}

function Ajax(data) {
  data.callback();
}

let data = {
  url:'./assets/php/category.php',
  type:'POST',
  callback :toprender,
  data:{all_cats:1},
  element_name:'cat'
}
Ajax(data);