Как сохранить имя функции обратного вызова внутри объекта javascript и вызвать - PullRequest
0 голосов
/ 10 января 2019

я пытаюсь построить эту функцию, получить данные JavaScript и обработать, что когда-нибудь понадобится функция обратного вызова, поэтому я пытаюсь передать эту функцию внутри объекта, но когда я вызываю это, она говорит, что функция не существует и еще эта функция все еще существует, и когда я передаю ее в качестве параметра, она работает, это происходит только тогда, когда я получаю имя функции обратного вызова из JavaScript Object

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 голосов
/ 10 января 2019

Вы пытаетесь использовать строку в качестве функции. Вы не можете сделать это.

Вы, вероятно, просто хотите изменить 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 на функцию, а не на строку.

Live Пример:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...