2011-01-26 10 views
0

応答で「次の」プロパティがなくなるまで、ajax要求(応答はjson)を実行する関数を実装したいと考えています。その後、私はいくつかのコールバック関数を実行する必要があります。これのための最良の方法は何ですか?私のコードは、誤ったコールバックのスコープのために動作しないし、私はそれを正しく渡す方法を想像することはできません。コールバック関数の範囲

 
_requestPhotos = function(url, callback) { 
    getYFContent(url, function(data) { 
    // some actions 

    if (!!data.next) { 
     _requestPhotos(data.next, callback); 
    } else { 
     callback(smth); 
    } 
    }); 
}; 

答えて

0

投稿したスクリプトに間違いがありません。例えば、同等のテストは次のようになります。

alertResult = function(text) { 
    console.log("Result is: " + text); 
} 

doRecursive = function(data, callback) { 
    if(!!data.next) { 
     doRecursive(data.next, callback); 
    } else { 
     callback(data.value); 
    } 
} 

var d = { value: 1, next: { value: 2, next: { value: 3 }}}; 

doRecursive(d, alertResult); 

ログ結果は、あなたが期待するものである、"Result is: 3"です。

エラーは他の場所です。どのようにこれを初めて呼び出すのですか、それに渡すコールバックとは何でしょうか(それはどのように定義されていますか?

+0

これは単なる再帰関数ではありません。問題は、 "getYFContent"はajaxリクエスト関数であり、すべてのアクションは($ .getのような)コールバック関数である2番目の引数に記述されています。 –

+0

(続き)... "写真"配列に適切な値を書きたいと思います。それらを得るために、私は一貫して要求を次々と作ります。これは問題です - getYFContent()は再帰的にコールし、コールバック(すべてのリクエストが送信された後に実行しなければならない関数で、すべての写真が得られます)fnのスコープは最初の反復のみです。 –

+0

ああ、もう1つの引数を 'getYFContent'に追加できますか?あなたはコールバックを周りに渡し続けることができます。 – Hamish