Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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中的另一个函数_Javascript_Jquery_Closures - Fatal编程技术网

将函数作为参数传递给javascript中的另一个函数

将函数作为参数传递给javascript中的另一个函数,javascript,jquery,closures,Javascript,Jquery,Closures,我希望在javascript中创建一个API系统(在单个对象中),所有这些都源于jQuery的ajax函数,但我希望能够传递一个覆盖“success”函数来触发,如下所示: function Eidos(){ this.api = function(data, success){ $.ajax({ type: 'POST', url: '/api', data: data,

我希望在javascript中创建一个API系统(在单个对象中),所有这些都源于jQuery的ajax函数,但我希望能够传递一个覆盖“success”函数来触发,如下所示:

function Eidos(){

    this.api = function(data, success){
        $.ajax({
            type: 'POST', 
            url: '/api',
            data: data,
            success: function(rData){
                return rData;
            }
        })
    };

    this.refreshInfo = function(id, success){
            log.info('refreshed page id:  '+ id);
            return this.api({'command': 'refresh', 'pageid': id}, success);
    }


};
在本例中,我只想“刷新”信息(拉入新的文本数据或您拥有的内容)。我已经有了服务器端页面设置

我会这样叫它:

$('.refresh').click(function(){
        $("#myModal").modal('show');
        var id = $(this).data('ei');
        var api = eidos.refreshInfo(id, function(){
                $("#myModal").modal('hide');
                });
        return false;
    });
显然这不起作用(顺便说一句,该对象已经通过var-eidos=new-eidos();)创建),但是,Idk知道如何实现它。我希望success:函数在不同的页面上表现不同,因此我需要一个覆盖,但我不确定如何在这里工作。

尝试更改

success: function(rData){
   return rData;
}

您当前没有调用(甚至没有使用)
success
参数。

尝试更改

success: function(rData){
   return rData;
}


您当前没有调用(甚至没有使用)
success
参数。

您正在进行一个异步调用,您的行为就像它是同步的一样。您不能从异步调用返回并期望它将数据返回到调用它的位置

this.api = function(data, success){
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: function(rData){
            return rData;  //<-- That return is not going to work
        }
    })
};
或者叫它

this.api = function(data, success){
    var that = this;
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: function(rData){
            success(); //<-- call it or you can use apply/call
            //success.apply(that,arguments);
            return rData;  //<-- That return is not going to work
        }
    })
};
this.api=函数(数据,成功){
var=这个;
$.ajax({
键入:“POST”,
url:“/api”,
数据:数据,
成功:函数(rData){

success();//您正在进行一个异步调用,并且您的行为就像它是同步的。您不能从异步调用返回,并期望它将数据返回到调用它的位置

this.api = function(data, success){
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: function(rData){
            return rData;  //<-- That return is not going to work
        }
    })
};
或者叫它

this.api = function(data, success){
    var that = this;
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: function(rData){
            success(); //<-- call it or you can use apply/call
            //success.apply(that,arguments);
            return rData;  //<-- That return is not going to work
        }
    })
};
this.api=函数(数据,成功){
var=这个;
$.ajax({
键入:“POST”,
url:“/api”,
数据:数据,
成功:函数(rData){
成功()//
是问题所在。您已经有回调函数的参数,请使用它:

        success: function(rData) {
            success(rData);
        }
或者,为了缩短它,将回调函数作为参数直接传递到jQuery ajax中

是问题所在。您已经有回调函数的参数,请使用它:

        success: function(rData) {
            success(rData);
        }

或者,为了缩短它,将回调函数作为参数直接传递到jQuery ajax中。

您没有在任何地方使用
success
回调函数

this.api = function(data, success){
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: success || function(rData) {
            // some default handler to use if none is passed
        }
    })
};

success:success | |函数(rData){
允许您的success参数是可选的;如果未传递任何参数,它将使用您指定的默认处理程序。

您没有在任何地方使用
success
回调函数

this.api = function(data, success){
    $.ajax({
        type: 'POST', 
        url: '/api',
        data: data,
        success: success || function(rData) {
            // some default handler to use if none is passed
        }
    })
};

success:success | |函数(rData){
允许您的success参数是可选的;如果未传递任何参数,它将使用您指定的默认处理程序。

考虑这一点的方式是,JQuery ajax函数在启动函数时将rData传递到您的函数中。rData只会返回JQuery内部的封闭范围内的某个地方,而您没有任何c因此,在这个成功函数中,可以使用它做一些事情

或者,您可以通过另一个事件向外部发出信号:

//...
    success:function(rData){
        $(someOtherObject).trigger({type:'rDataDelievered', successData:rData});
    }
}

someOtherObject.bind('rDataDelivered', function(e){ doSomething(e.successData); });

它不是一个被广泛使用的功能,但是可以使用jQuery动态定义一个新事件并在任何需要的情况下触发它。如果您没有传递rData对象,
trigger('rDataDelivered')
只需要一个简单的信号就足够了。但是这里有相当多的冗余。如果没有什么可以阻止您的话,最好在成功函数中使用适当的ajax事件来完成这项工作。

考虑这一点的方法是,JQuery ajax函数在触发rData时将rData传递到您的函数中。rData只需重新执行即可在jQuery内部的封闭作用域中的某个地方,您没有任何控制权,因此使用它的地方就在成功函数中

或者,您可以通过另一个事件向外部发出信号:

//...
    success:function(rData){
        $(someOtherObject).trigger({type:'rDataDelievered', successData:rData});
    }
}

someOtherObject.bind('rDataDelivered', function(e){ doSomething(e.successData); });

它不是一个被广泛使用的功能,但是可以使用jQuery动态定义一个新事件并在任何需要的情况下触发它。如果您没有传递rData对象,
trigger('rDataDelivered')
只需要一个简单的信号就足够了。但是这里有相当多的冗余。如果没有什么可以阻止你的话,最好在成功函数中创建ajax事件。

谢谢!这正是我想要的!我也刚刚测试过。效果100%!我很感激。^我的早期版本刚刚使用了函数中的“success”(rData)但我想应该是success(),就像其他人说的那样。谢谢!这正是我想要的!我也刚刚测试过它。100%有效!我很感激它。^我的早期版本只是在函数中使用了“success”(rData),但我想应该是success(),就像其他人说的那样。