0

私のアプリケーションの一部は、JSONP リクエストからのデータを使用してレンダリングされます。Sammy.Session を使用して、このリクエストの結果をクライアント側でキャッシュできるようにしたいと考えています。

ただし、JSONP リクエストは同期的であるため、問題が発生しています。これが私の現在の非動作コードです:

this.get('#/projects', function(context) {
    var categories = this.session('categories', function() {
        var data;
        $.getJSON('http://mysite.com/projects/categories/?jsoncallback=?', null,
            function(json) {
                data = json.categories;
            });
            return data;
         });
    });

    // categories is undefined at this point,
    // because the JSONP call may not have finished

    // code that renders the data

    this.session('categories', categories);
});

私がやりたくないのは、カテゴリがセッション中の場合に JSONP リクエストを行うことです。JSONP リクエストが完了するまでルートの残りのコードを待機させる方法はありますか?

4

1 に答える 1

0

これを解決するために私が考えることができる唯一の方法は、セッションが見つからない場合にコールバックを利用しようとせず、JSON リクエストの結果から、またはセッションが利用可能な場合に呼び出し可能な共有関数を利用することでした。誰かがこれを達成するためのより良い方法を知っている場合は、例を見てみたい.

this.get('#/projects', function(context) {
    ...

    var categories = this.session('categories');

    if (categories == undefined) {
        this.load('http://mydomain.com/projects/categories/?jsoncallback=?',
            {dataType: 'json'})
            .then(function(json) {
                context.session('categories', json.categories);
                // call to shared function
            });
    }
    else {
        // call to shared function
    }
});
于 2013-06-26T13:53:01.683 に答える