将函数作为参数传递给javascript中的另一个函数
我希望在javascript中创建一个API系统(在单个对象中),所有这些都源于jQuery的ajax函数,但我希望能够传递一个覆盖“success”函数来触发,如下所示:将函数作为参数传递给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,
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(),就像其他人说的那样。