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

时间:2013-06-25 21:13:27

标签: jquery jsonp sammy.js

我的部分应用程序使用来自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请求结束?

1 个答案:

答案 0 :(得分: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
    }
});