我想从localStorage获取我的数据,因为它更快,更可靠离线,然后从网上获取数据,让我们说ajax调用。
function getdata(){
function loadViaAjax(){
localStorage.data=newerData;
return newerData;
}
if(localStorage.data){
return localStorage.data;
}
}
toBeInseretIntoDOM=getData(); //AngularJS will do this part
目标是首先获得localStorage.data
,因为用户可以缓慢连接,旧信息仍然优于无,并同时执行ajax request
以获取最新数据。
从逻辑上讲,localStorage的数据会更快,因此它们应该被返回以进行处理并插入到DOM中,但是一旦ajax赶上,数据就会更新。
答案 0 :(得分:2)
function setdata(data){
//do whatever you need to with your data here
}
function getdata(){
$.get(data_url,function(response){
setdata(response);
});
if(localStorage.data){
setdata(localStorage.data);
}
}
当调用getdata
时,将立即发送ajax请求。无需等待回复,数据将通过setdata
从本地存储(如果存在)设置。当ajax请求收到响应setdata
时再次调用,但这次是服务器数据。
答案 1 :(得分:1)
如果你的某个功能有时会异步,有时也不会(或者,在你的情况下,总是两者都有),那么我发现最好的办法就是像对待它一样对待#&# 39; s总是异步的。换句话说,传递一个回调并始终根据那里的结果:
function getdata(callback) {
$.get(data_url, function(response) {
callback(response);
});
callback(localStorage.data);
}
像这样使用:
getdata(function(data) {
// do something
});
请注意,回调不必关心是否同步检索数据。它可以根据收到的数据采取行动。
类似的模式是,如果你有数据,则返回数据,如果你没有,那就去获取数据:
function getdata(callback) {
if (localStorage.data) {
callback(localStorage.data);
} else {
$.get(data_url, function(response) {
callback(response);
});
}
}
答案 2 :(得分:0)
我听起来像是在说......
我想保留localStorage中可用数据的最后一个副本,但有一段时间我想知道我是否可以通过Ajax
刷新数据。
如果是这种情况,那么你可以这样......
// This is not complete code ...
function loadData(callback) {
getFromCache() {
var data = window.localStorage.getItem("mystuff");
if (data) {
callback(JSON.parse(data));
}
}
handleSuccess(data) {
window.localStorage.setItem("mystuff", JSON.stringify(data));
callback(data);
}
var ajaxConfig = {
url: "http://example.com",
error: getFromCache,
success: handleSuccess
}
// Trigger ajax call here...
// You can even use a window.setTimeout() here
// to see if the ajax event takes too long -- if so
// cancel it and call getFromCache
}