我有jQuery函数:
$('#fetch').click( function() {
...
GetPage( curPage, items, DrawItemSet( items ) )
});
如您所见,我希望从GetPage函数内部执行回调函数 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()
}
}
});
}
正如你所看到的,当还有一些页面要获取时,这个函数会调用自己,如果没有页面剩余,应该调用回调函数来做一些事情。您可以在下面看到回调示例(仅用于测试):
function DrawItemSet() {
console.log( 'DrawItemSet called.' )
...
}
我的问题是理论上一切看起来都不错,我应该进入控制台DrawItemSet作为最后一条消息,这意味着在获取完成后调用了回调函数。好吧..而不是它,我得到以下信息:
DrawItemSet called.
Starting to get page number 1
Curpage=1 MaxPage=2
Starting to get page number 2
Curpage=2 MaxPage=2
passed
这意味着不知何故回调是第一个被执行的函数。
怎么会这样?!