Jquery 将Sammy.js会话设置为JSONP请求的结果
我的应用程序的一部分是使用JSONP请求中的数据呈现的。我希望能够使用Sammy.Session在客户端缓存此请求的结果 然而,我有一些困难,因为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
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
}
});