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