Javascript 临时职能返回
我希望从localStorage获取数据,因为它在脱机时更快、更可用,然后从web获取数据,比如ajax调用Javascript 临时职能返回,javascript,function,Javascript,Function,我希望从localStorage获取数据,因为它在脱机时更快、更可用,然后从web获取数据,比如ajax调用 function getdata(){ function loadViaAjax(){ localStorage.data=newerData; return newerData; } if(localStorage.data){ return localStorage.data; } } toBeInser
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请求
以获取最新数据。从逻辑上讲,localStorage的数据将更快,因此它们应该返回进行处理并插入DOM,但是一旦ajax赶上,数据应该得到更新
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,但这次调用的是服务器数据。
我想在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
}
如果你有一个函数,有时是异步的,有时不是(或者,在你的例子中,总是两者都是),那么我发现最好的办法就是把它当作总是异步的。换句话说,将回调传递给它,并始终对那里的结果执行操作:
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);
});
}
}
这个用例是什么?我的意思是,如果需要从服务器获取数据,那么从localStorage显示的信息要么不完整,要么不准确。如果它是不完整的,那么只有在用户要求的情况下才能获取它。如果它不准确,那么从本地存储获取它就没有意义。在任何情况下,如果您想延迟服务器请求,您可以始终使用javascript的
设置超时
想象它在您的手机上,并且手机具有互联网连接,我想至少获取最后一次会话数据,如果用户恢复了互联网连接,他应该得到最新的信息,这和你在文章中提到的几秒钟后从服务器上获取信息有很大的区别。如果是这种情况,那么你应该询问如何检查移动设备上的互联网连接(如果有的话)。老实说,我甚至不知道问题是什么。好多了。非常感谢,如果没有设置localStorage.data(这不是您所要求的),我们将只从服务器获取数据。P.S有点想改变被接受的答案:(@Mike-我的第二个例子是这样的,我只是为了比较而把它包括进来