[英]jQuery caching JSON response
我正在使用基本函数来执行AJAX请求并获取JSON:
function getData(endpoint) {
return $.ajax({
type: "GET",
url: endpoint
});
}
问题是有时终端可能没有响应或者花费太多时间来加载数据。 在这种情况下,我需要使用从上一次调用端点获得的最新JSON。
我正在寻找一种方法来跟踪AJAX响应时间,如果它超过给定的时间限制,则使用上一个请求的缓存JSON响应。
使用jQuery有一种优雅的方式吗?
谢谢你的任何建议
尝试用一些示例代码解释Anthony Gris的评论
var lastResponseData;
function getData(endpoint) {
return $.ajax({
type: "GET",
url: endpoint,
dataType: 'json',
timeout: 1000,
error:function(jqxhr, status){
if(status==="error"){
if(lastResponseData!=null){
//use it
}
}
else
{
getData(endpoint); try again
},
success:function(data){
lastResponseData=data;
//do work
}
}
});
}
变量和延迟对象+超时会使这很容易:
var prevReq = $.Deferred().resolve().promise();
function getData(endpoint) {
var newReq = $.ajax({
type: "GET",
url: endpoint,
timeout: 2000
}).then(function(data){
// successful, set previous request to this request
prevReq = newReq;
return data;
},function(){
// it failed, return the previous successful request
return prevReq;
});
return newReq;
}
getData("1").done(function(data){
console.log(data);
})
您应该具有处理AJAX不同结果的函数,但是在成功的情况下,您应该在全局对象中存储响应,并始终从那里获取数据,例如:
GlobalObj = {};
GlobalObj.response = {};
function getData(endpoint) {
var data;
$.ajax({
type: "GET",
url: endpoint
})
.done(function(){
//store in global object
})
.fail(function(){})
.always( function(){
data = GlobalObj.response;
//these methods are asyncronous
//here you should assing the value instead of returning
});
}
您可以将最后一个响应保存在浏览器cookie中。
看看jQuery cookie 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.