私はjQuery関数を持っています:
$('#fetch').click( function() {
...
GetPage( curPage, items, DrawItemSet( items ) )
});
ご覧のとおり、コールバック関数 DrawItemSet をGetPage関数内から実行したいと考えています。場合によっては、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
これは、コールバックが最初に実行される関数であることを意味します。
どうして?!