Javascript 带参数的回调
我有jQuery函数:Javascript 带参数的回调,javascript,callback,Javascript,Callback,我有jQuery函数: $('#fetch').click( function() { ... GetPage( curPage, items, DrawItemSet( items ) ) }); 如您所见,我希望回调函数DrawItemSet从函数内部执行。有时,我需要调用的不是DrawItemSet,而是一些其他函数。。我只想从GetPage函数调用任何需要调用的函数。我拿到那一页后(你可能会猜到),有必要做一些后续工作。在这个例子中,我想显示一些数据。在其他情况下,我不
$('#fetch').click( function() {
...
GetPage( curPage, items, DrawItemSet( items ) )
});
如您所见,我希望回调函数DrawItemSet从函数内部执行。有时,我需要调用的不是DrawItemSet,而是一些其他函数。。我只想从GetPage函数调用任何需要调用的函数。我拿到那一页后(你可能会猜到),有必要做一些后续工作。在这个例子中,我想显示一些数据。在其他情况下,我不想显示一些文本,但是,例如,交换从GetPage函数中获得的信息。在这种情况下,我的想法是写下如下内容:
...
GetPage( curPage, items, SwapItemSet( oldItems ) )
现在看来,一切都很好
下面是我的GetPage列表:
function GetPage( pageNum, collection, callback ) {
console.log( 'Starting to get page number ' + pageNum )
$.ajax({
url: 'http://www.xxxxxxxxxxx.php?page=' + pageNum,
type: 'get',
dataType: '',
success: function(data) {
...
console.log( 'Curpage=' + curPage + ' MaxPage=' + maxPages )
if( curPage < maxPages ) {
curPage = curPage + 1
GetPage( curPage, collection, callback )
}
else {
console.log( 'passed' )
callback()
}
}
});
}
我的问题是,理论上一切看起来都正常,我应该在控制台DrawItemSet中获取最后一条消息,这意味着回调函数是在抓取完成后调用的。好。。相反,我得到的是:
DrawItemSet called.
Starting to get page number 1
Curpage=1 MaxPage=2
Starting to get page number 2
Curpage=2 MaxPage=2
passed
这意味着回调函数是第一个被执行的函数
怎么会这样 当您编写
DrawItemSet(items)
时,您将立即调用DrawItemSet
,然后将其返回值作为callback
传入。这就是为什么它被称为“第一”。您甚至在调用GetPage
之前就调用了它
有几种方法可以将其作为带有参数的回调传递。最常见的方法是传入一个匿名函数,如下所示:
GetPage( curPage, items, function(){ DrawItemSet( items ) } );
在现代浏览器中,您还可以使用:
也可以使用jQuery版本的bind,名为:
非常感谢你!我现在将使用第一个变体。
GetPage( curPage, items, function(){ DrawItemSet( items ) } );
GetPage( curPage, items, DrawItemSet.bind(null, items) );
GetPage( curPage, items, $.proxy(DrawItemSet, null, items) );