Jquery 将Sammy.js会话设置为JSONP请求的结果

Jquery 将Sammy.js会话设置为JSONP请求的结果,jquery,jsonp,sammy.js,Jquery,Jsonp,Sammy.js,我的应用程序的一部分是使用JSONP请求中的数据呈现的。我希望能够使用Sammy.Session在客户端缓存此请求的结果 然而,我有一些困难,因为JSONP请求是同步的。以下是我当前的非工作代码: this.get('#/projects', function(context) { var categories = this.session('categories', function() { var data; $.getJSON('http://mys

我的应用程序的一部分是使用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请求完成吗?

我能想到的唯一解决方法是,如果找不到会话,不要尝试利用回调,如果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
    }
});